В Docker, в чем разница между контейнером и изображением?
в чем разница между контейнером и изображением в Docker? В начало работы с Docker tutorial эти термины используются, но я не понимаю разницы.
может кто-нибудь пролить свет?
12 ответов:
образ-это упорядоченная коллекция изменений корневой файловой системы и соответствующих параметров выполнения для использования в среде выполнения контейнера. Изображения доступны только для чтения.
контейнер-это активный (или неактивный при выходе) экземпляр образа с сохранением состояния.
изображения являются замороженными неизменяемыми снимками живых контейнеров. Контейнеры запускают (или останавливают) экземпляры некоторых изображений.
начните с базового образа под названием "ubuntu". Давайте запустим Bash в интерактивном режиме в образе ubuntu и создадим файл. Мы будем использовать
-iи-tфлаги, чтобы дать нам интерактивную оболочку Bash.$ docker run -i -t ubuntu /bin/bash root@48cff2e9be75:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@48cff2e9be75:/# cat > foo This is a really important file!!!! root@48cff2e9be75:/# exitне ожидайте, что этот файл будет придерживаться при выходе и перезапуске изображения. Вы перезапускаете из точно такого же определенного состояние, как вы начали раньше, а не там, где вы остановились.
$ docker run -i -t ubuntu /bin/bash root@abf181be4379:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@abf181be4379:/# exitно контейнер, теперь больше не работает, имеет состояние и может быть сохранен (зафиксирован) в образе.
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abf181be4379 ubuntu:14.04 /bin/bash 17 seconds ago Exited (0) 12 seconds ago elegant_ardinghelli 48cff2e9be75 ubuntu:14.04 /bin/bash About a minute ago Exited (0) 50 seconds ago determined_pare ...давайте создадим образ из контейнера ID 48cff2e9be75, где мы создали наш файл:
$ docker commit 48cff2e9be75 ubuntu-foo d0e4ae9a911d0243e95556e229c8e0873b623eeed4c7816268db090dfdd149c2теперь у нас есть новое изображение с нашим действительно важным файлом:
$ docker run ubuntu-foo /bin/cat foo This is a really important file!!!!попробуйте команду
docker images. Вы должны увидеть свое новое изображениеubuntu-fooперечислены вместе сubuntuстандартное изображение, с которого мы начали.
используя аналогию объектно-ориентированного программирования, разница между изображением Docker и контейнером Docker такая же, как разница между классом и объектом. Объект-это экземпляр среды выполнения класса. Аналогично, контейнер является экземпляром образа во время выполнения.
объект создается только один раз при создании экземпляра. Кроме того, контейнер может быть запущен или остановлен. Контейнеры создаются из образа, хотя это может быть не всегда так. В следующем примере создается образ сервера Apache, выполняется образ, перечисляются образы и затем перечисляются контейнеры:
создайте Dockerfile со следующим содержимым:
FROM httpd:2.4установить сервер Apache
sudo docker build -t my-apache2 .выполнить изображение
sudo docker run -it --rm --name my-running-app my-apache2список настройки изображения
sudo docker imagesсписок запущенных докеров контейнеры
docker psСписок всех контейнеров
docker ps -aсписок последних созданных контейнеров
docker ps -l
в просто слова.
изображения -
файловая система и конфигурация (только для чтения) приложение, которое используется для создание контейнеров.более подробно.
Тара -
это запущенные экземпляры изображений Docker. Контейнеры запустить приложения. Контейнер включает в себя приложение и все его зависимости. Он разделяет ядро с другими контейнерами и работает как изолированный процесс в пространстве пользователя на ОС хоста.более подробно.
другие важные термины, чтобы заметить:
Докер демон -
фоновая служба, запущенная на хосте, который управляет зданием, запуск и распределение контейнеров Docker.
Docker client -
инструмент командной строки, который позволяет пользователю взаимодействовать с Докером демон.
Настройки Магазина -
Store-это, среди прочего, реестр изображений Docker. Вы можете думайте о реестре как о каталоге всех доступных образов Docker.
картинка стоит тысячи слов.
(для более глубокого понимания пожалуйста, прочитайте этой.)
резюме:
- тянуть изображения из Docker hub или сборки из Dockerfile = > дает изображение Docker (не редактируется).
- выполнить изображение (
docker run image_name:tag_name) = > дает запущенное изображение, т. е. контейнер (редактируемый)
изображение в основном является неизменяемым шаблоном для создания контейнера. Легче понять разницу между изображением и контейнером, рассмотрев, что происходит с изображением, чтобы превратить его в контейнер.
Docker engine берет изображение и добавляет файловую систему для чтения и записи сверху, а затем инициализирует различные настройки. Эти параметры включают сетевые параметры (IP, порт и т. д.), имя, идентификатор и любые ограничения ресурсов (процессор, память). Если двигатель Докера был запрошен для запуска контейнер он также инициализирует процесс внутри него. Контейнер может быть остановлен и перезапущен, в этом случае он сохранит все настройки и изменения файловой системы (но потеряет что-либо в памяти, и все процессы будут перезапущены). По этой причине остановленный или выходящий контейнер не то же самое, что и изображение.
изображения [как vm]
- только для чтения шаблон, используемый для создания контейнеров
- Buuilt вами или другими пользователями Docker
- хранится в Docker Hub или в вашем локальном реестре
контейнеры [как бегущая машина]
- изолированная платформа приложения
- содержит все необходимое для запуска приложения
- на
в Docker все начинается с изображения. Образ-это каждый файл, который составляет достаточно операционной системы, чтобы сделать то, что вам нужно сделать. Традиционно вы устанавливаете целую операционную систему со всем для каждого приложения, которое вы делаете. С Docker вы соединяете его так, чтобы у вас был небольшой контейнер с достаточным количеством операционной системы, чтобы делать то, что вам нужно, и вы можете иметь много и много их эффективно на компьютере.
использовать
docker imagesпосмотреть установленные образы иdocker psдля просмотра запущенных изображений. При вводеdocker runОн берет изображение и делает его живым контейнером с запущенным процессом. Я склонен использовать:docker run-ti
<image>:<tag>Башнаконец, изображения имеют свой собственный набор идентификаторов, а контейнеры имеют свой собственный набор идентификаторов-они не перекрываются.
DockerFile --(Build)-->DockerImage --(run)--> DockerContainer
DockerFile это то, что вы или разработчик пишете код, чтобы сделать что - то (ex-Install)
Docker-Образ вы получаете, когда вы строите файл docker .
Докер Контейнер вы получаете, когда вы запускаете изображение Докера
мы можем получить Докер Изображение из docker hub, потянув, а затем запустите его, чтобы получить контейнер .
контейнеры основаны на изображениях. Изображение должно быть передано команде Dockers run.
пример:
BusyBox изображения
http://i.stack.imgur.com/eK9dC.png
здесь мы указываем изображение под названием
busybox. Docker не имеет этого образа локально и извлекает его из общедоступного реестра.реестр-это каталог образов Docker, с которыми клиент Docker может взаимодействовать и загружать образ от. После извлечения изображения Docker запускает контейнер и выполняет команду echo hello world.
изображения: файловой системы и метаданные, необходимые для запуска контейнеров. Их можно рассматривать как формат упаковки приложения, который включает все зависимости для запуска приложения и параметры по умолчанию для выполнения этого приложения. Метаданные включают значения по умолчанию для выполняемой команды, переменные среды, метки и команду healthcheck.
Тара: экземпляр изолированного приложения. Контейнер нуждается в изображении, чтобы определить его начальное состояние и использует файловую систему только для чтения из образа вместе с конкретной файловой системой для чтения и записи контейнера. Запущенный контейнер-это оболочка вокруг запущенного процесса, дающая пространства имен этого процесса для таких вещей, как файловая система, сеть и PIDs.
при выполнении
docker runкоманда, вы предоставляете изображение в командной строке вместе с любыми конфигурациями, и docker возвращает контейнер, основанный на этом определении изображения и конфигурациях, которые вы предоставлена.
ссылки: для docker engine изображение-это просто идентификатор изображения. Это уникальный неизменяемый хэш. Изменение изображения приводит к созданию нового идентификатора изображения. Однако, вы можете иметь одну или несколько ссылок, указывающих на картинку, не в отличие от символических ссылок. И эти ссылки могут быть обновлены, чтобы указать на новый идентификатор образа. обратите внимание, что при создании контейнера docker разрешит эту ссылку во время создания контейнера, поэтому вы не можете обновить изображение работающего контейнера. Вместо этого вы создаете новый образ и создаете новый контейнер на основе этого нового образа.
слои: копая немного глубже, у вас есть слои файловой системы. Docker собирает изображения со слоистой файловой системой. Каждый слой представляет собой набор изменений в файловой системе только для чтения, и этот слой представлен уникальным хэшем. Используя эти слои только для чтения, несколько изображений могут расширить другое, и только различия между этими изображениями должны быть сохранены или передается по сети. При запуске контейнера Docker он получает определенный для контейнера слой файловой системы для чтения и записи, уникальный для этого контейнера, и все слои изображений собираются с ним с помощью файловой системы union. Чтение обрабатывается через каждый слой до тех пор, пока файл не будет найден, удаление не будет найдено, или файл не будет найден в нижнем слое. Запись выполняет копирование при записи из слоя только для чтения изображения в определенный для контейнера слой для чтения и записи. И удаление записывается как изменение уровня чтения-записи для конкретного контейнера. Общим шагом при построении изображений является выполнение команды во временном контейнере на основе состояния файловой системы предыдущего изображения и сохранение полученного слоя контейнера в качестве слоя в новом изображении.
Настройки Изображений: Он содержит список команд и инструкции о том, как построить и запустить контейнер. Таким образом, в основном изображения содержат все данные и метаданные, необходимые для запуска контейнера(также называемого blueprint).Мы не можем обедать контейнер без указания изображений.
$docker images centosперечислите все доступные версии centos.
Контейнера Docker : Контейнеры-это обед из изображений, поэтому мы можем сказать, что контейнер-это запущенный экземпляр изображений. Контейнер-это конструкция времени выполнения, в отличие от изображений, которые являются конструкцией времени сборки.
официальное различие заключается в том, что контейнер является последним слоем, который доступен для записи, тогда как слои ниже только читаются, и они принадлежат вашему изображению. Интуитивное различие заключается в том, что экземпляр docker-это экземпляр, виртуализированный вашим демоном docker, и запуск вашего образа, он работает в изолированном разделе вашего ядра (этот процесс скрыт от вас). Однако изображение статично, оно не запускается, это просто куча слоев (статические файлы). Если бы мы относились эта парадигма для объектно-ориентированного программирования, изображение-это ваше определение класса, тогда как ваш экземпляр docker-это ваш класс, порожденный объект, который находится в памяти.
Я написал учебник, чтобы укрепить вашу интуицию знаний докера:
http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html


Comments