Docker: Образ vs Контейнер — Что Есть Что? — Основное Различие

В Docker-мире существуют такие понятия, как образы, контейнеры и слои.

Несмотря на то, что они тесно связаны — они отличаются, и в начале изучения Docker часто возникают сложности в понимании этих терминов.

В данной статье объясняется разница между образами, контейнерами и слоями.

Дельный Совет: Узнайте как из командной строки получить список запущенных или остановленных Docker-контейнеров! Читать далее →

Что Такое Образ в Docker?

Не Путайте: Сам по себе Docker-образ невозможно «запускать». Команда docker run берет Docker-образ в качестве темплейта и создает из него контейнер, который и запускается.

Образы создаются из Dockerfile с помощью команды docker build.

Образы хранятся в Docker-реестрах, как например Docker Hub и их можно скачать с помощью команды docker pull:

$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
50aff78429b1: Pull complete 
f6d82e297bce: Pull complete 
275abb2c8a6f: Pull complete 
9f15a39356d6: Pull complete 
fc0342a94c89: Pull complete 
Digest: sha256:ec0e4e8bf2c1178e025099eed57c566959bb408c6b478c284c1683bc4298b683
Status: Downloaded newer image for ubuntu:latest

Чтобы просмотреть скачанные Docker-образы, выполните docker images:

$ docker images
REPOSITORY         TAG                IMAGE ID           CREATED            SIZE
ubuntu             latest             00fd29ccc6f1       2 weeks ago        111MB

Дельный Совет: Узнайте как освободить место на Docker-хосте удалив ненужные Docker-образы! Читать далее →

Что Такое Слои в Docker?

Образы в Docker так устроены, что они состоят из нескольких слоев.

Каждая инструкция из Dockerfile создает новый слой образа.

Каждый слой представляет собой набор отличий (diff) от предыдущего слоя.

Чтобы просмотреть все слоя образа, выполните команду docker history:

$ docker history 00fd29ccc6f1
IMAGE         CREATED       CREATED BY                                      SIZE
00fd29ccc6f1  2 weeks ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>     2 weeks ago   /bin/sh -c mkdir -p /run/systemd && echo '...   7B
<missing>     2 weeks ago   /bin/sh -c sed -i 's, except the top one,/...   2.76kB
<missing>     2 weeks ago   /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>     2 weeks ago   /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745B
<missing>     2 weeks ago   /bin/sh -c #(nop) ADD file:f5a2d04c3f3cafa...   111MB

Каждый слой Docker-образа доступен только для чтение (read-only).

Что Такое Docker-контейнер?

Основное Различие: Основное различие между образом и контейнером — в доступном для записи верхнем слое.

Контейнеры создаются из образов с помощью команды docker run, а выполнив команду docker ps можно узнать какие контейнеры в данный момент запущены.

$ docker run -it ubuntu /bin/bash
root@af588b25a4ad:/# 

$ docker ps
CONTAINER ID   IMAGE    COMMAND      CREATED         STATUS         PORTS   NAMES
af588b25a4ad   ubuntu   "/bin/bash"  24 seconds ago  Up 23 seconds          jovial

Чтобы создать контейнер, движок Docker берет образ, добавляет доступный для записи верхний слой и инициализирует различные параметры (сетевые порты, имя контейнера, идентификатор и лимиты ресурсов).

Все операции на запись внутри контейнера сохраняются в этом верхнем слое и когда контейнер удаляется, верхний слой, который был доступен для записи, также удаляется, в то время как нижние слоя остаются неизменными.

Поскольку каждый контейнер имеет свой собственный слой для записи, и все изменения сохраняются в этом слое, несколько контейнеров могут совместно использовать доступ к одному и тому же основному образу оставаясь каждый в своем собственном состоянии.

Дельный Совет: Узнайте как освободить место на Docker-хосте удалив ненужные образы! Читать далее →

3 Replies to “Docker: Образ vs Контейнер — Что Есть Что? — Основное Различие”

  1. Спасибо. Стало понятнее.

  2. Simple and Crispy Explaination !!!! Thanks.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.