Все еще не понимаете образы и контейнеры Docker?

Docker
Все еще не понимаете образы и контейнеры Docker?

1. Что такое докер

Docker — это движок с открытым исходным кодом, который упрощает создание легковесного, портативного, самодостаточного контейнера для любого приложения. Контейнеры, которые разработчики компилируют и тестируют на своих собственных машинах, можно развертывать в производственных средах партиями, включая виртуальные машины, «голое железо», кластеры OpenStack и другие базовые платформы приложений. Это определение докера из энциклопедии Baidu. После прочтения этого кажется, что оно не объясняет использование докера. Это не имеет значения, просто сравните его, и вы узнаете. Прежде всего, эта статья не будет касаться очень эзотерических контента и стремится использовать простые и понятные слова, чтобы проиллюстрировать преимущества докера и его базовое использование. Мы все использовали виртуальные машины.Первое изображение должно быть громоздким и медленно запускаться.Конечно, функция совершенно безупречна, но этого мало, поэтому родился докер.Какой язык может объяснить все лучше, чем картинки Шерстяная ткань?

docker
docker

Приведенное выше изображение является хорошей иллюстрацией всего.Традиционная виртуальная машина имитирует аппаратное обеспечение компьютера одно за другим с помощью программного обеспечения, а затем устанавливает систему на моделируемом компьютере, а затем запускает приложение внутри системы, например два приложения. нужно, на одном работает Nginx, а на другом MySQL, то если вы используете виртуальную машину, вам нужно установить систему дважды.Хост-машина является реальным невиртуальным компьютером, чтобы сохранить эти две виртуальные системы, не говоря уже о самом важном пространство. Главное, чтобы дать хосту дополнительные накладные расходы. Системы этих двух виртуальных машин требуют ресурсов процессора и памяти. Давайте снова посмотрим на Docker. Вы можете видеть, что он поддерживает только изоляцию нескольких движков Docker путем установки Docker Двигатель в хосте.Приложения, обратите внимание, что среда изолирована.Отсутствие двух ОС, несомненно, сэкономит огромные ресурсы.Эти два приложения дают нам ощущение, что они работают в двух разных системах.Связь между ними должна полагаться на конкретной сетевой связи. , но на самом деле это общие хост-системы. Что касается того, как они изолированы, это еще одна сложная тема. Видя, что докер имеет так много преимуществ, не терпится попробовать?

Во-вторых, установка докера и базовая настройка

Установка в win7 осуществляется через виртуальную машину, в win10 это гораздо удобнее.Docker for WindowsУстановочный пакет, скачайте соответствующий исходный код для компиляции и установки под linux, т.к. разработка обычно ведется на win10, поэтому кратко расскажем о настройке после установки Docker for Windows в win 10. Обратите внимание, что у вас должен быть установлен docker for windows в win10.Поддержка Hyper-V, если вы не поддерживаете это, вы можете установить только виртуальную машину, чтобы испытать докер.После установки войдите в интерфейс настройки:

docker_settings
docker_settings

Проверьте диск, который необходимо разделить.Только если этот флажок установлен, контейнер может получить доступ к файлам хост-компьютера.Для этого требуется пароль администратора.Если пароля нет, необходимо установить пароль администратора.В противном случае конфигурация не может быть успешной, и тогда конфигурация Образ ускоряется, контейнер докера создается с опорой на образ (образ в докере), и образ подтягивается с удаленного, так же, как мы подтягиваем код из github. хорошо известно что отечественная сеть хочет тянуть образ Это не просто, поэтому нужно настроить зеркальное ускорение, достаточно заполнить адрес ускорения в Зеркалах Реестра в колонке Демон.Я привык использовать Alibaba Cloud’s’otsyn80i.mirror.aliyuncs.com' Ускоряем адрес, после того, как все ок, можем запускать нашу любимую командную строку, набирая команды!

3. Базовая работа докера

 ->docker --version  #查看版本
   Docker version 17.09.0-ce, build afdb6d4

Найдите изображение и потяните его вниз
Команда для загрузки образа очень проста, просто используйте команду docker pull. На зеркальном веб-сайте Docker зеркала хранятся в виде «имя пользователя/имя зеркала».
См. изображения докеров, которые могут использоваться для удаления зеркала, в котором идентификатор зеркала IMAGE ID является идентификатором, может использоваться для удаления зеркала удаления docker rmi IMAGE ID [ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ, РЕПОЗИТОРИЙ]

 ->docker search centos
   NAME            DESCRIPTION                      STARS         OFFICIAL      AUTOMATED
   centos          The official build of CentOS.    3824          [OK]
                            ...
 ->docker pull centos #拉取镜像
 ->docker images
   REPOSITORY          TAG        IMAGE ID        CREATED       SIZE
   centos              latest     a7876479f1aa    4 years ago   128MB
 ->docker rmi a7876479f1aa #删除image

Запустите hello world в контейнере докеров, используйте docker run для создания контейнера, после того как docker run сгенерирует контейнер и сохранит его, а затем вы можете запустить контейнер напрямую, не создавая новый контейнер, контейнер здесь контейнер, контейнер докера A можно понимать как процесс, работающий в песочнице. Эта песочница содержит ресурсы, необходимые для запуска процесса, включая файловую систему, библиотеку системных классов, среду оболочки и т. д. Но эта песочница не будет запускать никакие программы по умолчанию. Чтобы запустить контейнер, в песочнице должен быть запущен процесс. Этот процесс является единственным процессом в контейнере, поэтому, когда процесс завершится, контейнер полностью остановится.
Вы можете просмотреть работающий контейнер через docker ps. Когда мы запускаем docker run centos echo "hello word" и видим вывод "hello word", а затем запускаем docker ps, вывод контейнера отсутствует. Это потому, что контейнер завершил выполнение echo «Ни один процесс не запущен после приветственного слова», поэтому контейнер завершает работу. Все контейнеры можно посмотреть через docker ps -a

 ->docker run centos echo "hello word" #通过 centos 镜像创建一个容器来输出 "hello word"
   hello word
 ->docker ps -a
   CONTAINER ID   IMAGE      COMMAND              CREATED          STATUS              PORTS     NAMES
   e46ec634bbe1   centos     "echo 'hello word'"  12 minutes ago   Exited (0) 12 minutes ago

Следующим шагом будет установка простой программы на контейнер. Образ Centos был загружен ранее, поэтому вы можете использовать команду yum для установки программы.
Примечание. После выполнения команды yum контейнер остановится, но изменения в контейнере не будут потеряны. Но повторно запустить контейнер из образа, ранее установленной программы не существует, т.к. все модификации для контейнера (контейнера), а не для образа, поэтому контейнер из образа запуска совершенно новый.

->docker run centos yum -y install net-tools
->docker ps -a  #可以看到已经存在两个 container
  CONTAINER ID  IMAGE     COMMAND                CREATED         STATUS           PORTS     NAMES
  2f1bbd6c30e3  centos    "yum install -y ne..." 1 minutes ago   Exited (0) 1 minute ago    competent
  35129633c933  centos    "echo hello word"      1 minutes ago   Exited (0) 1 minute ago    dazzling

Теперь контейнер доступен, и необходимые программы установлены, но контейнер всего один, так что толку его не запускать?Не волнуйтесь, давайте посмотрим на запуск контейнера, но есть несколько способов контейнер. Один из них — создание. Когда контейнер запускается, ему нужен активный процесс, чтобы поддерживать работу контейнера. Когда все процессы в контейнере завершатся, контейнер остановится соответственно, поэтому очень важно создать контейнер и сохранить его. Просто используйте команду ping.

->docker run centos ping lozz.cc
  PING lorencoll.coding.me (103.218.240.147) 56(84) bytes of data.
  64 bytes from 103.218.240.147 (103.218.240.147): icmp_seq=1 ttl=37 time=16.0 ms
  64 bytes from 103.218.240.147 (103.218.240.147): icmp_seq=2 ttl=37 time=16.4 ms
  Ctrl+C
->docker ps  #查看活动的容器
  CONTAINER ID    IMAGE      COMMAND        CREATED              STATUS       PORTS        NAMES
  10c5c2754279     centos    "ping lozz.cc" About a minute ago   Up About a minute         jolly

Если есть старт, будет и стоп. Для остановки контейнера можно использовать команду docker stop container_id для остановки контейнера. Теперь поговорим о втором способе запуска контейнера. Этот метод используется, когда контейнер был создан. Мы знаем, что новый контейнер создается каждый раз, когда вы запускаете. Иногда вам не нужно создавать контейнер. Вы можете использовать docker start container_id для запуска контейнера. В это время вам нужно обратить внимание. После при запуске контейнера неактивный контейнер процесса все равно выйдет. , поскольку контейнер создается из образа, поэтому контейнер также содержит дополнительную команду для создания контейнера. При запуске докера дополнительная команда для создания контейнер будет повторно выполнен. Это немного сбивает с толку, верно? Понятно.

->docker ps    #查看活动的容器
  CONTAINER ID    IMAGE    COMMAND          CREATED          STATUS      PORTS         NAMES
  10c5c2754279    centos   "ping lozz.cc"   23 minutes ago   Up 23 minutes             jolly

->docker ps -a #查看所有存在的容器
  CONTAINER ID    IMAGE    COMMAND                CREATED          STATUS      PORTS        NAMES
  10c5c2754279    centos   "ping lozz.cc"         21 minutes ago   Up 21 minutes            jolly
  2f1bbd6c30e3    centos   "yum install -y ne..." 36 minutes ago   Exited (0) 3 minute ago  competent
  35129633c933    centos   "echo hello word"      About hour ago   Exited (0) hour ago      dazzling

# 尝试启动安装了 net-tools 的容器,
# -i 的意思是把信息输出到控制台中,没有这个参数执行后就直接返回一个CONTAINER ID
->docker start -i 2f1bbd6c30e3
  Loaded plugins: fastestmirror, ovl
  Loading mirror speeds from cached hostfile
   * base: mirrors.aliyun.com
   * extras: mirrors.aliyun.com
   * updates: mirrors.cn99.com
  Package net-tools-2.0-0.22.20131004git.el7.x86_64 already installed and latest version
  Nothing to do
->docker ps  #查看活动的容器
  CONTAINER ID    IMAGE    COMMAND          CREATED          STATUS      PORTS         NAMES
  10c5c2754279    centos   "ping lozz.cc"   30 minutes ago   Up 30 minutes             jolly
->docker stop 10c5c2754279  #停止执行ping命令的容器
  10c5c2754279
->docker start -i 10c5c2754279  #启动执行ping命令的容器
  PING lorencoll.coding.me (103.72.144.62) 56(84) bytes of data.
  64 bytes from 103.72.144.62 (103.72.144.62): icmp_seq=1 ttl=37 time=15.1 ms
  64 bytes from 103.72.144.62 (103.72.144.62): icmp_seq=2 ttl=37 time=16.3 ms
  64 bytes from 103.72.144.62 (103.72.144.62): icmp_seq=3 ttl=37 time=16.8 ms
  Ctrl+C

Из приведенных выше советов могут знать , что команда запуска , чтобы создать команду докера прогоны CentOS перед теми нями -y установить нетто-инструменты ни -y установить нетто-инструменты также выполнить еще раз, потому что судно установлена сетчатые инструменты, поэтому нет необходимости установить ни были подсказка, контейнеровозы или только для просмотра событий в предыдущем период. Так что теперь есть проблема, я установил контейнеры нетто-инструменты не могут быть использованы все же, это не так, этот контейнер причина, почему «не может» просто потому, что вы не указали при создании соответствующей команды, также можно использование, мы помещаем он вновь упакован в образ , который является зеркалом, упаковал , а затем он генерирует через контейнер на нем, на самом деле, что согласуется с применением изоляции Докера подумал, упакованный в команду контейнера зеркала очень простой докер совершить container_id имя_образа, мои команды упаковки являются докер коммит 2f1bbd6c30e3 lorenwe / centos_net_tools, это правило называется, перед Docker идентификатор пользователя, если вы хотите поставить толкнул в Докер ступице , что имя не может быть случайно назвал этот образ, если не нажат в Докер ступице не имеет значения, но не слишком случайным, верно.

->docker ps -a
  CONTAINER ID    IMAGE    COMMAND                CREATED        STATUS     PORTS     NAMES
  10c5c2754279    centos   "ping lozz.cc"         About an hour ago                   jolly
  2f1bbd6c30e3    centos   "yum install -y ne..." About an hour ago                   competent
  35129633c933    centos   "echo hello word"      About an hour ago                   dazzling
->docker commit 2f1bbd6c30e3 lorenwe/centos_net_tools
  sha256:35f8073cede14473601d9f138a9815bc9ab5c7d97f914ca2f5ce910bd78b5750
->docker images
  REPOSITORY                  TAG          IMAGE ID         CREATED             SIZE
  lorenwe/centos_net_tools    latest       35f8073cede1     23 seconds ago      277MB
  centos                      latest       d123f4e55e12     2 weeks ago         197MB
  d4w/nsenter                 latest       9e4f13a0901e     14 months ago       83.8kB

Вот так просто, создается новый образ (image) и теперь с этим образом можно делать кое-что интересное Это все та же команда docker run, но на этот раз добавлены еще некоторые параметры, например docker run -itd - -name my_net_tools lorenwe/centos_net_tools /bin/bash
Параметр itd означает «стандартный ввод в контейнер», «выделение виртуального терминала», «запуск в качестве демона (в фоновом режиме)», --name естественно указывает имя контейнера после создания, /bin/bash выполняет скрипт bash, выполните приведенную выше команду, вы можете создать контейнер, работающий в фоновом режиме.

->docker run -itd --name my_net_tools lorenwe/centos_net_tools /bin/bash
  e1d843f7726f67d2635042695e2065b383736a341edd2e83753be9fabec03de0
->docker ps  #查看活动的容器
  CONTAINER ID   IMAGE                     COMMAND      CREATED      STATUS   PORTS      NAMES
  e1d843f7726f   lorenwe/centos_net_tools  "/bin/bash"  7 seconds ago                    my_net_tools
  10c5c2754279   centos                    "ping lozz.cc"            Up 25 minutes       jolly

Ну запускается, а дальше конечно можно заходить в контейнер и играть, используйте docker attach container_id для входа в контейнер Docker

->docker attach e1d843f7726f
[root@e1d843f7726f /]# ip addr
bash: ip: command not found
[root@e1d843f7726f /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 40  bytes 1900 (1.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@e1d843f7726f /]#

Это связано с тем, что этот контейнер основан на Centos, а базовый образ докера Centos является упрощенной версией, поэтому многие команды недоступны, например этот ip-адрес, что также является причиной, по которой я решил установить net-tools раньше, потому что его можно использовать после установки этого ifconfig для просмотра конфигурации сетевой карты. Есть ли у вас базовое представление о докере?Внезапно ли у вас появилось вдохновение, например, если вы хотите создать статический сервер Nginx, шаги заключаются в том, чтобы извлечь базовый образ и запустить контейнер через этот базовый образ? После того, как Nginx будет установлен в контейнере, его можно будет переупаковать в новый образ. На самом деле с помощью doke для сборки образа этого не сделать.Не говоря уже о громоздких шагах, это не очень гибко.Ведь ранее собранный образ lorenwe/centos_net_tools тоже весит 277Мб! Распространяться не удобно, поэтому появился Dockerfile, его функция описание образа через определенный формат, а сборка образа через docker.Описанный процесс фактически аналогичен предыдущему процессу ручной сборки.Через тот же Dockerfile можно Создайте идентичную среду, поэтому докер часто используется для унификации операционной среды системы на работе.

4. Переместите докер в концентратор докеров

Команда для отправки образа очень проста, вам нужно только docker push image_name. Прежде чем отправить образ в докер-хаб, нужно еще сделать некоторые приготовления. Вам нужно зайти в докер-хаб, чтобы зарегистрировать учетную запись, а затем войти в эту учетная запись в докере Изображение может быть отправлено.

->docker login  #登入到 docker hub
  Login with your Docker ID to push and pull images from Docker Hub. 
  If you don't have a Docker ID, head over to https://hub.docker.com to create one.
  Username (lorenwe): lorenwe
  Password:
  Login Succeeded
  # 现在就可推送镜像到 docker hub
->docker images
  REPOSITORY                TAG        IMAGE ID            CREATED             SIZE
  lorenwe/centos_net_tools  latest     35f8073cede1        About an hour ago   277MB
  centos                    latest     d123f4e55e12        2 weeks ago         197MB
  d4w/nsenter               latest     9e4f13a0901e        14 months ago       83.8kB
->docker push lorenwe/centos_net_tools
  The push refers to a repository [docker.io/lorenwe/centos_net_tools]
  d0ba94ecc37e: Pushed
  cf516324493c: Mounted from library/centos
  latest: digest: sha256:276814315437cf5d416ed4b5713fe10c914beaea96bcf583b786a6778c80830f size: 741

Поскольку сервер стены и докер-хаб находятся далеко от Китая, отправка будет очень медленной. После успеха вы можете увидеть изображение, которое вы отправили, в личном центре докер-хаба. Если вы хотите использовать этот образ в будущем , вы можете напрямую вытащить его из докера. Вы также можете отправить образ на внутреннюю платформу службы образов контейнеров. Например, я использую Container Hub Alibaba Cloud. Его может быть удобно использовать из-за его высокой скорости. Плохо только то, что вонючее и длинное имя изображения немного неудобно.

V. Заключение

К этому моменту уже были представлены основы Docker. Цель написания этой статьи — объяснить взаимосвязь между образами Docker и контейнерами на простом для понимания языке и примерах. которые не были представлены в будущем.Есть время, чтобы сделать последующие статьи, такие как Dockerfile, совместное использование томов докеров и сетевое взаимодействие и т. д., некоторые особенно интересные функции, моделирование создания переносимой распределенной платформы разработки больше не мечта .
Девичья работа, но и надежда слегка впрыснуть!