В чем разница между образом Docker и контейнером?

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

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

Что такое контейнер?

Решение

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

Вы можете увидеть все ваши образы с помощью docker images, а запущенные контейнеры - с помощью docker ps (и вы можете увидеть все контейнеры с помощью docker ps -a).

Таким образом, запущенный экземпляр образа - это контейнер.

Комментарии (14)

Из моей статьи Автоматизация развертывания Docker:

Образы Docker против контейнеров

В Dockerland есть образы и есть контейнеры. Эти два понятия тесно связаны, но в то же время различны. Для меня понимание этой дихотомии значительно прояснило Docker.

Что такое изображение?

Образ - это инертный, неизменяемый файл, который по сути является снимком контейнера. Образы создаются командой build, а при запуске командой run они создают контейнер. Образы хранятся в реестре Docker, например registry.hub.docker.com. Поскольку они могут стать довольно большими, образы разработаны таким образом, что состоят из слоев других образов, что позволяет передавать минимальное количество данных при передаче образов по сети.

Локальные образы можно найти в списке, выполнив команду docker images:

REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                    13.10               5e019ab7bf6d        2 months ago        180 MB
ubuntu                    14.04               99ec81b80c55        2 months ago        266 MB
ubuntu                    latest              99ec81b80c55        2 months ago        266 MB
ubuntu                    trusty              99ec81b80c55        2 months ago        266 MB
                                  4ab0d9120985        3 months ago        486.5 MB

Некоторые моменты, на которые следует обратить внимание:

  1. IMAGE ID - это первые 12 символов истинного идентификатора изображения. Вы можете создать много тегов данного изображения, но их идентификаторы будут одинаковыми (как указано выше).
  2. ВИРТУАЛЬНЫЙ РАЗМЕР - виртуальный, потому что он складывает размеры всех отдельных нижележащих слоев. Это означает, что сумма всех значений в этом столбце, вероятно, намного больше, чем дисковое пространство, используемое всеми этими изображениями.
  3. Значение в столбце REPOSITORY получено с помощью флага -t команды docker build, или с помощью docker tag-ing существующего образа. Вы можете пометить образы, используя номенклатуру, которая имеет смысл для вас, но знайте, что docker будет использовать тег в качестве местоположения реестра в команде docker push или docker pull.
  4. Полная форма тега - [REGISTRYHOST/][USERNAME/]NAME[:TAG]. Для ubuntu выше, REGISTRYHOST будет означать registry.hub.docker.com. Поэтому, если вы планируете хранить образ под названием my-application в реестре по адресу docker.example.com, вам следует пометить этот образ тегом docker.example.com/my-application.
  5. Колонка TAG - это просто часть [:TAG] тега full. Это неудачная терминология.
  6. Тег latest не является магическим, это просто тег по умолчанию, если вы не указали тег.
  7. Вы можете иметь немаркированные изображения, идентифицируемые только по их IMAGE ID. Они получат тег `` и REPOSITORY. О них легко забыть.

Более подробную информацию об образах можно найти в документации Docker и глоссарии.

Что такое контейнер?

Если использовать метафору программирования, то если образ - это класс, то контейнер - это экземпляр класса - объект времени выполнения. Контейнеры - это, надеюсь, то, почему вы используете Docker; это легкие и переносимые инкапсуляции среды, в которой можно запускать приложения.

Просмотрите локальные запущенные контейнеры с помощью docker ps:

CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                    NAMES
f2ff1af05450        samalba/docker-registry:latest      /bin/sh -c 'exec doc   4 months ago        Up 12 weeks         0.0.0.0:5000->5000/tcp   docker-registry

Здесь я запускаю докеризованную версию реестра docker, чтобы у меня было личное место для хранения моих образов. Опять же, некоторые вещи, на которые стоит обратить внимание:

  1. Как и IMAGE ID, CONTAINER ID является истинным идентификатором контейнера. Он имеет ту же форму, но идентифицирует объект другого типа.
  2. docker ps выводит только работающие контейнеры. Вы можете просмотреть все контейнеры (работающие или остановленные) с помощью команды docker ps -a.
  3. NAMES можно использовать для идентификации запущенного контейнера с помощью флага --name.

Как избежать накопления образов и контейнеров

Одним из моих первых разочарований в Docker было кажущееся постоянным скопление неотмеченных образов и остановленных контейнеров. В нескольких случаях такое скопление приводило к тому, что жесткие диски с максимальной нагрузкой замедляли работу моего ноутбука или останавливали мой автоматизированный конвейер сборки. Поговорим о "контейнерах повсюду"!

Мы можем удалить все неотмеченные образы, объединив docker rmi с недавним запросом dangling=true:

docker images -q --filter "dangling=true" | xargs docker rmi.

Docker не сможет удалить образы, которые находятся за существующими контейнерами, поэтому вам, возможно, придется сначала удалить остановленные контейнеры с помощью docker rm:

docker rm `docker ps --no-trunc -aq`

Это известные болевые точки в Docker, и они могут быть решены в будущих выпусках. Однако, имея четкое представление об образах и контейнерах, этих ситуаций можно избежать с помощью нескольких практических приемов:

  1. Всегда удаляйте бесполезный, остановленный контейнер с помощью команды docker rm [CONTAINER_ID].
  2. Всегда удаляйте образ, лежащий в основе бесполезного, остановленного контейнера, с помощью docker rmi [IMAGE_ID].
Комментарии (11)

Хотя проще всего представить контейнер как запущенный образ, это не совсем точно.

Образ - это шаблон, который можно превратить в контейнер. Чтобы превратить образ в контейнер, движок Docker берет образ, добавляет сверху файловую систему для чтения и записи и инициализирует различные настройки, включая сетевые порты, имя контейнера, ID и ограничения на ресурсы. Запущенный контейнер имеет текущий выполняющийся процесс, но контейнер также можно остановить (или выйти в терминологии Docker'). Вышедший контейнер - это не то же самое, что образ, поскольку он может быть перезапущен и сохранит свои настройки и любые изменения в файловой системе.

Комментарии (5)

В простые слова.

Картинки -

> в файловой системе и конфигурации(только для чтения) приложение, которое используется для

создавать контейнеры. Подробнее.

Контейнер -

эти запущенные экземпляры образов Docker. Контейнеры запустить применения. Контейнер включает в себя приложение и все его В зависимости. Он разделяет ядра с другими контейнерами и работает как изолированный процесс в пространстве пользователя на хост-ОС. Подробнее.


Другие важные термины, чтобы заметить:


Демон докер -

фоновая служба запущена на хост, который управляет зданием, запуск и распространение контейнеров Docker.

Докер клиента -

командной строки инструмент, который позволяет пользователю взаимодействовать с докер демон.

Докер Магазин -

В магазине, между прочим, реестр образов Docker. Вы можете думать реестре в качестве каталога всех существующих образов Docker.

Картинка из этот пост в блоге стоит тысячи слов.

(Для более глубокого понимания прочтите этот.)

Резюме:

  • Потяните изображения из Докер-концентратор или строить из файла Docker => дает изображения настройки (не редактируемые).
  • Запуск изображения (докер запустить имя_образа:tag_name) => дает запуск изображения, т. е. контейнер (редактируемые)
Комментарии (5)

Может быть, объясняя весь процесс может помочь.

Все начинается с файла Docker. В файла Docker-это исходный код изображения.

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

Как только вы имеете изображение контейнера, вы должны распространять его с помощью реестр. Реестр-это как Git-репозиторий ... вы можете толкать и тянуть изображений.

Далее, вы можете использовать изображения для запуска емкости. Запущенный контейнер очень похожи во многих аспектах, в виртуальную машину (но без гипервизора).

Комментарии (2)

Рабочий процесс #

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

+------------+  docker build   +--------------+  docker run -dt   +-----------+  docker exec -it   +------+
| Dockerfile | --------------> |    Image     | --------------->  | Container | -----------------> | Bash |
+------------+                 +--------------+                   +-----------+                    +------+
                                 ^
                                 | docker pull
                                 |
                               +--------------+
                               |   Registry   |
                               +--------------+

В списке изображений можно запустить, выполните команду:

docker image ls

Чтобы получить список контейнеров можно выполнить команды:

docker ps
Комментарии (3)

Я не мог'т понять концепцию изображения и слой даже прочитав здесь все вопросы и в конце концов наткнулся на эту прекрасную документацию от Docker (да!).

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

  • Изображения: Докер изображение строится из серии чтения слои

  • Уровень: каждый слой представляет собой инструкция в файла Docker изображения.

Пример: внизу файла Docker содержит четыре команды, каждая из которых создает слой.

от Ubuntu:15.04

копия . /приложение

запустить Make /приложение

УМК питона /app/app.py

Важно, каждый слой только набор отличий от слоя перед ней.

  • Контейнер. Когда вы создаете новый контейнер, добавить новый записываемый слой поверх базового слоя. Этот слой часто называют “контейнер слой”. Все изменения, внесенные в работающем контейнере, таком как написание новых файлов, изменения существующих файлов и удаление файлов, записываются в эту тонкий записываемый слой-контейнер.

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

Понимание изображений КНС контейнеры от размера-на диске точки зрения

Чтобы посмотреть приблизительный размер рабочего контейнера, вы можете использовать команду докер ПС-ы. Вы получаете размер и виртуального как два выхода:

  • Размер: объем данных (на диске), который используется для перезаписываемого слоя каждого контейнера

Используется виртуальный размер: объем данных используется только для чтения данных изображения в контейнер. Несколько контейнеров могут иметь некоторые или все только для чтения данных изображения. Следовательно, это не добавка. Т. е. вы можете'т добавить все виртуальные размеров, чтобы подсчитать, сколько размер на диске используется образ

Другой важной концепцией является копирование при записи стратегия

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

Я надеюсь, что поможет кому-то еще нравлюсь.

Комментарии (1)

Файла Docker &ампер;остатки→; (строить) &ампер;остатки→; изображения &ампер;остатки→; (запустить) &ампер;остатки→; контейнер.

  • Файла Docker: содержит комплекс Докер инструкции, положения вашей операционной системы, как вам нравится, и установит/настроит все программное обеспечение.

  • Изображения: скомпилированного файла Docker. Экономит ваше время от восстановление файла Docker каждый раз, когда вам нужно запустить контейнер. И это's не способ, чтобы скрыть ваш код положения.

  • Контейнер: виртуальная операционная система сама. Вы можете войти по SSH и запускать любые команды, которые вы хотите, как если бы это's в реальной среде. Вы можете запустить 1000+ контейнеры из того же изображения.

Комментарии (0)

Проще говоря, если изображения является класс, затем контейнер - это экземпляр класса во время выполнения объекта.

Комментарии (0)

Основная концепция Докер, чтобы сделать его легким для создания "машины" и что, в этом случае можно считать контейнеров. Контейнер со СПИДом в повторное использование, что позволяет создавать и удалять контейнеры с легкостью.

Изображения изображают состояние контейнера в каждый момент времени. Так что основной рабочий процесс:

  1. создать образ
  2. запустить контейнер
  3. внести изменения в контейнер
  4. сохраните контейнер обратно в качестве изображения
Комментарии (0)

Контейнер-это просто исполняемый файл, который будет выполняться на хост-ОС под набор ограничений, заданных с помощью приложения (например, настройки), что знает, как определить ОС, какие ограничения в применении.

Типичными ограничениями являются процессом изоляции обзоры, связанные с безопасностью (например, использование SELinux в защиты) и системы-ресурсах, (памяти, дисков, процессора и сети).

До недавнего времени, только ядра в UNIX-системах поддерживается возможность запускать исполняемые файлы под строгие ограничения. Что's, почему большинство контейнеров сегодня поговорим в основном Linux и других дистрибутивов Unix.

Docker-это одно из тех приложений, что знает, как определить ОС (Linux в основном), что ограничений на запуск исполняемого файла под. Исполняемый файл находится в Докер изображение, которое просто архив. Что исполняемый обычно урезанная версия дистрибутива Linux (Ubuntu, а в CentOS, Debian, и т. д.) предварительно настроен для запуска одного или нескольких приложений в рамках.

Хотя большинство людей используют Linux в качестве исполняемого файла, это может быть любой другой двоичный файл приложения, как долго, как хост-ОС может запустить его (см. Создание простой базовый образ с помощью скретч). Ли бинарных в Docker-образ ОС или просто приложение, хост-ОС, это просто другой процесс, содержащихся в процесс правят заданной границы ОС.

Другие приложения, которые, как Докер, могу сказать, хост-ОС, какие границы, чтобы применить к процессу во время его работы, относятся для lxc, переводы и добавлена. Докер привыкли использовать эти приложения, чтобы я косвенно взаимодействовать с ОС Linux, но теперь Докер напрямую взаимодействует с Linux, используя свою собственную библиотеку под названием "[libcontainer][6]&;.

Так что контейнеры просто процессов работает в ограниченном режиме, подобно тому, что чтение привыкли делать.

ИМО, то, что отличает Докер отдельно от любой другой контейнер технология репозитории (Докер-концентратор) и их средств управления, которая делает работу с контейнерами чрезвычайно прост.

См. [Докер (программное обеспечение)][8].

[6]: https://en.wikipedia.org/wiki/Docker_(программного обеспечения)

[8]: https://en.wikipedia.org/wiki/Docker_(программного обеспечения)

Комментарии (1)

Как много ответов на это обратил внимание: вы строение файла Docker получить изображения и запустить изображения получить контейнер.

Однако, следующие шаги помогли мне получить лучшее понимание того, что докер изображения и контейнер:

  1. Создание Файла Docker:

докер построить -Т my_image dir_with_dockerfile

  1. Сохранить изображение в .файл tar

докер спасти -о my_file.деготь my_image_id

my_file.тар будут храниться изображения. Открыть его с тар-xvf my_file.тар`, и вы увидите все слои. Если вы погрузитесь глубже в каждый слой можно увидеть, какие изменения были добавлены в каждом слое. (Они должны быть довольно близко к команды в файла Docker).

  1. заглянуть внутрь контейнера, вы можете сделать:

судо докер Run-это my_image Баш

и вы видите, что это очень похоже на ОС.

Комментарии (0)

Изображения - это эквивалент определение класса в ООП и слои разные методы и свойства этого класса.

Контейнер - это фактический экземпляр изображения, так как объект является экземпляром или экземпляром класса.

Комментарии (0)

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

Изображения упаковки часть Докер, исходный код" или "Мои программы&quot аналогично, чтобы ";. Контейнеры являются выполнение части Докер, аналогично и "Процесс" по.

Вопрос, только в "программе" относится к и что'с изображением. В "Бег" в части докер контейнер. Когда контейнер запущен, и изменения будут внесены, это's, как если бы процесс вносит изменение в свой собственный исходный код и сохранить его как новое изображение.

Комментарии (0)

Как в плане программирования,

Изображения исходный код.

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

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

Комментарии (1)

Я думаю, что это лучше объяснить в начале.

Предположим, что вы выполните команду докер запустить Привет мир. Что происходит?

Он называет командной строки Docker, который несет ответственность команды Docker и преобразование вызова *настройки сервера команды. Как только настройки сервера получает команду на запуск изображения, он проверяет погоду изображения кешем имеет изображения** с таким названием.

Предположим привет-мира не существует. Настройки сервера идет Докер-концентратор (Докер-концентратор-это просто бесплатное хранилище изображений) и спрашивает, Эй ступицы, есть ли у вас изображения под названием Привет мир? Ответы концентратор - да, я делаю. Тогда дай его мне, пожалуйста. И процесс загрузки начнется. Как только Docker-образ загружен, настройки сервера ставит его в кэш изображения.

Так что прежде, чем мы объяснить, что образы Docker и Docker контейнеры, позвольте'ы начать с введения об операционной системе на компьютере, и как она работает программное обеспечение.

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

А теперь представьте, что у вас есть две программы, Chrome и Node.js. Хром необходим Python версии 2, чтобы запустить и Node.js требуется Python версии 3 для запуска. Если у вас есть только установить Python V2 на ваш компьютер, будет запущен только хром.

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

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

Комментарии (0)

В изображения - это на "снимок" из а контейнер. Вы можете делать снимки из контейнера (новых и"скриншоты"), и вы также можете начать новые контейнеры из образа (создания группы «снимок" - а).

Например, вы можете создать новый контейнер из базового изображения, выполнять некоторые команды в контейнер, а потом снимков, как новый образ. Затем вы можете запустить 100 контейнеров из нового изображения.

Другие вещи, чтобы рассмотреть:

  • Изображение состоит из слоев, и слои снимка "и (так, когда вы нажимаете изображение, Вам только нужно отправить в&quot дифференциалы " Какая разница"От; До реестр).
  • В файла Docker определяет некоторые команды поверх базового изображения, который создает новые слои ("в сравнении", У), что результат в новом образе (на"снимок" - а).
  • Изображения-теги не только теги. Они являются изображения'ы с "полным именем" ("и репозитория:бирка и"). Если же изображение имеет несколько названий, он показывает несколько раз, когда делаешь настройки изображений.
Комментарии (0)

Короче:

Контейнер является подразделением (виртуальный) в ядре, которая разделяет общую ОС и работает образу (Докер).

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

Комментарии (0)

Контейнер Docker работает экземпляр изображения. Вы можете связать изображение с программой и контейнер с процессом :)

Комментарии (0)

Изображение класса в качестве контейнера к объекту.

Контейнер представляет собой экземпляр изображения, как объект является экземпляром класса.

Комментарии (0)