Какая разница между контейнером и изображением в Docker? В Начните с учебника Docker эти термины используются, но я не понимаю разницы.
Кто-нибудь может пролить свет?
Какая разница между контейнером и изображением в Docker? В Начните с учебника Docker эти термины используются, но я не понимаю разницы.
Кто-нибудь может пролить свет?
Изображение представляет собой упорядоченную коллекцию изменений корневой файловой системы и соответствующие параметры выполнения для использования в среде выполнения контейнера. Изображения доступны только для чтения.
Контейнер представляет собой активную (или неактивную, если она завершена) инстанцирование изображения с сохранением состояния.
Изображения заморожены неизменными снимками живых контейнеров. Контейнеры запускают (или останавливают) экземпляры некоторого изображения.
Начните с базового изображения под названием "ubuntu". Позвольте запустить bash интерактивно внутри образа ubuntu и создать файл. Мы будем использовать флаги -i
и -t
, чтобы предоставить нам интерактивную оболочку bash.
$ docker run -i -t ubuntu /bin/bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# cat > foo
This is a really important file!!!!
[email protected]:/# exit
Не ожидайте, что файл будет закрыт, когда вы выйдете и перезапустите изображение. Вы перезапускаете с точно такого же определенного состояния, как вы начали раньше, а не там, где вы остановились.
$ docker run -i -t ubuntu /bin/bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# 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
, с которого мы начали.
Используя аналогию объектно-ориентированного программирования, разница между изображением Докера и контейнером Докера является такой же, как разница между классом и объектом. Объект - это экземпляр среды выполнения класса. Точно так же контейнер представляет собой экземпляр времени выполнения изображения.
Объект создается только один раз при его создании. Аналогично, контейнер может работать или останавливаться. Контейнеры создаются из образа, хотя это может быть не всегда так. В следующем примере создается образ сервера Apache, запускается изображение, отображаются изображения и затем перечисляются контейнеры:
Создайте файл Docker со следующим содержимым:
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
docker ps
Список всех контейнеров
docker ps -a
Список последних созданных контейнеров
docker ps -l
Изображение в основном является неизменным шаблоном для создания контейнера. Легче понять разницу между изображением и контейнером, рассмотрев, что происходит с изображением, чтобы превратить его в контейнер.
Механизм Docker берет изображение и добавляет файловую систему чтения-записи сверху, а затем инициализирует различные настройки. Эти параметры включают параметры сети (IP, порт и т.д.), Имя, идентификатор и любые ограничения ресурсов (ЦП, память). Если двигатель Docker попросил запустить контейнер, он также инициализирует процесс внутри него. Контейнер можно остановить и перезапустить, и в этом случае он сохранит все настройки и изменения файловой системы (но потеряет что-либо в памяти, и все процессы будут перезапущены). По этой причине остановленный или выходящий контейнер не совпадает с изображением.
Это довольно прямо.
(Для более глубокого понимания прочитайте this.)
Изображения -
Файловая система и конфигурация нашего приложения, которые используются для создавать контейнеры.
Контейнеры -
Запуск экземпляров изображений Docker - контейнеры запускают фактические Приложения. Контейнер включает приложение и все его зависимостей. Он разделяет ядро с другими контейнерами и работает как изолированный процесс в пользовательском пространстве на ОС хоста.
Docker daemon -
Фоновая служба, запущенная на хосте, который управляет зданием, запуск и распространение контейнеров Docker.
Клиент Docker -
Инструмент командной строки, который позволяет пользователю взаимодействовать с Docker демон.
Docker Store -
Store - это, помимо прочего, реестр изображений Docker. Ты можешь подумайте о реестре как каталоге всех доступных изображений Docker.
В Docker все начинается с изображения. Изображение - это каждый файл, который составляет достаточно операционной системы, чтобы делать то, что вам нужно. Традиционно вы должны установить всю операционную систему со всем для каждого используемого вами приложения. С Docker вы соедините его так, чтобы у вас был небольшой контейнер с достаточной операционной системой, чтобы делать то, что вам нужно делать, и вы можете иметь много и много из них эффективно на компьютере.
Используйте docker images
, чтобы увидеть установленные изображения и docker ps
, чтобы увидеть запущенные изображения.
Когда вы вводите docker run
, он принимает изображение и делает его живым контейнером с запущенным процессом. Я обычно использую:
docker run -ti
<image>:<tag>
bash
Наконец, у изображений есть свой набор идентификаторов, а контейнеры имеют свой собственный набор идентификаторов - они не перекрываются.
основаны на изображениях. Изображение должно быть передано команде запуска dockers. Пример: - Изображение busybox
http://i.stack.imgur.com/eK9dC.png
Здесь мы указываем образ под названием busybox. docker не имеет этого изображения локально и извлекает его из общего реестра. Реестр представляет собой каталог изображений докеров, с которыми клиент-докер может взаимодействовать и загружать изображение. Как только изображение потянуто, докеры запускают контейнер и выполняют команду echo hello world.
Изображения докеров: Он содержит список команд и инструкций о том, как создавать и запускать контейнер. Таким образом, в основном изображения содержат все данные и метаданные, необходимые для запуска контейнера (также называемого планом). Мы не можем обедать в контейнере без указания изображений.
$docker images centos
Перечислите всю доступную версию centos.
Контейнер для докеров: Контейнеры обедают от изображений, поэтому мы можем сказать, что контейнер - это исполняемый экземпляр изображений. Контейнер - это среда выполнения, в отличие от изображений, которая является конструкцией времени построения.