При использовании Docker мы начинаем с базового образа. Мы загружаем его, создаем изменения, и эти изменения сохраняются в слоях, формируя другой образ.
В итоге у меня есть образ для моего экземпляра PostgreSQL и образ для моего веб-приложения, изменения в которых сохраняются.
Что такое контейнер?
Экземпляр изображения называется контейнером. У вас есть образ, который представляет собой набор слоев, как вы описали. Если вы запустите этот образ, у вас будет запущенный контейнер этого образа. У вас может быть много запущенных контейнеров одного и того же образа.
Вы можете увидеть все ваши образы с помощью docker images
, а запущенные контейнеры - с помощью docker ps
(и вы можете увидеть все контейнеры с помощью docker ps -a
).
Таким образом, запущенный экземпляр образа - это контейнер.
Из моей статьи Автоматизация развертывания 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
<none> <none> 4ab0d9120985 3 months ago 486.5 MB
Некоторые моменты, на которые следует обратить внимание:
-t
команды docker build
, или с помощью docker tag
-ing существующего образа. Вы можете пометить образы, используя номенклатуру, которая имеет смысл для вас, но знайте, что docker будет использовать тег в качестве местоположения реестра в команде docker push
или docker pull
.[REGISTRYHOST/][USERNAME/]NAME[:TAG]
. Для ubuntu
выше, REGISTRYHOST будет означать registry.hub.docker.com
. Поэтому, если вы планируете хранить образ под названием my-application
в реестре по адресу docker.example.com
, вам следует пометить этот образ тегом docker.example.com/my-application
.latest
не является магическим, это просто тег по умолчанию, если вы не указали тег.<none>
и 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, чтобы у меня было личное место для хранения моих образов. Опять же, некоторые вещи, на которые стоит обратить внимание:
docker ps
выводит только работающие контейнеры. Вы можете просмотреть все контейнеры (работающие или остановленные) с помощью команды docker ps -a
.--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, и они могут быть решены в будущих выпусках. Однако, имея четкое представление об образах и контейнерах, этих ситуаций можно избежать с помощью нескольких практических приемов:
docker rm [CONTAINER_ID]
.docker rmi [IMAGE_ID]
.Хотя проще всего представить контейнер как запущенный образ, это не совсем точно.
Образ - это шаблон, который можно превратить в контейнер. Чтобы превратить образ в контейнер, движок Docker берет образ, добавляет сверху файловую систему для чтения и записи и инициализирует различные настройки, включая сетевые порты, имя контейнера, ID и ограничения на ресурсы. Запущенный контейнер имеет текущий выполняющийся процесс, но контейнер также можно остановить (или выйти в терминологии Docker'). Вышедший контейнер - это не то же самое, что образ, поскольку он может быть перезапущен и сохранит свои настройки и любые изменения в файловой системе.
В простые слова.
Картинки -
> в файловой системе и конфигурации(только для чтения) приложение, которое используется для
создавать контейнеры. Подробнее.
Контейнер -
эти запущенные экземпляры образов Docker. Контейнеры запустить применения. Контейнер включает в себя приложение и все его В зависимости. Он разделяет ядра с другими контейнерами и работает как изолированный процесс в пространстве пользователя на хост-ОС. Подробнее.
Другие важные термины, чтобы заметить:
Демон докер -
фоновая служба запущена на хост, который управляет зданием, запуск и распространение контейнеров Docker.
Докер клиента -
командной строки инструмент, который позволяет пользователю взаимодействовать с докер демон.
Докер Магазин -
В магазине, между прочим, реестр образов Docker. Вы можете думать реестре в качестве каталога всех существующих образов Docker.
Картинка из этот пост в блоге стоит тысячи слов.
(Для более глубокого понимания прочтите этот.)
Резюме:
докер запустить имя_образа:tag_name
) => дает запуск изображения, т. е. контейнер (редактируемые)Может быть, объясняя весь процесс может помочь.
Все начинается с файла Docker. В файла Docker-это исходный код изображения.
После создания файла Docker, вы построить его, чтобы создать изображения контейнера. Образ-это всего лишь "и скомпилированную версию" и от "исходный код" и который файла Docker.
Как только вы имеете изображение контейнера, вы должны распространять его с помощью реестр. Реестр-это как Git-репозиторий ... вы можете толкать и тянуть изображений.
Далее, вы можете использовать изображения для запуска емкости. Запущенный контейнер очень похожи во многих аспектах, в виртуальную машину (но без гипервизора).
Рабочий процесс #
Вот сквозного рабочего процесса, показывающие различные команды и связанные с ними входы и выходы. Что следует прояснить взаимосвязь между изображением и контейнер.
+------------+ docker build +--------------+ docker run -dt +-----------+ docker exec -it +------+
| Dockerfile | --------------> | Image | ---------------> | Container | -----------------> | Bash |
+------------+ +--------------+ +-----------+ +------+
^
| docker pull
|
+--------------+
| Registry |
+--------------+
В списке изображений можно запустить, выполните команду:
docker image ls
Чтобы получить список контейнеров можно выполнить команды:
docker ps
Я не мог'т понять концепцию изображения и слой даже прочитав здесь все вопросы и в конце концов наткнулся на эту прекрасную документацию от Docker (да!).
Пример действительно есть ключ к понимаю всей концепции. Это длинный пост, поэтому я подытоживая ключевые моменты, которые должны быть очень уяснили, чтобы получить ясность.
Изображения: Докер изображение строится из серии чтения слои
Уровень: каждый слой представляет собой инструкция в файла Docker изображения.
Пример
: внизу файла Docker содержит четыре команды, каждая из которых создает слой.
от Ubuntu:15.04
копия . /приложение
запустить Make /приложение
УМК питона /app/app.py
Важно, каждый слой только набор отличий от слоя перед ней.
следовательно, основное различие между контейнером и изображение и GT; топ записываемый слой. Все записи в контейнер, добавить новые или модифицировать существующие данные хранятся в этом записываемый слой. Когда контейнер удаляется, записываемый слой также удаляется. В базового изображения остается неизменным.
Понимание изображений КНС контейнеры от размера-на диске точки зрения
Чтобы посмотреть приблизительный размер рабочего контейнера, вы можете использовать команду докер ПС-ы
. Вы получаете размер
и виртуального
как два выхода:
Используется виртуальный размер: объем данных используется только для чтения данных изображения в контейнер. Несколько контейнеров могут иметь некоторые или все только для чтения данных изображения. Следовательно, это не добавка. Т. е. вы можете'т добавить все виртуальные размеров, чтобы подсчитать, сколько размер на диске используется образ
Другой важной концепцией является копирование при записи стратегия
Если существует файл или каталог в нижний слой в изображение, а другой слой (в том числе записываемый слой) должен читать к ее, он просто использует существующий файл. Первый раз, когда еще один слой должен модифицировать файл (при построении изображения или выполнения контейнера), файл копируется в этот слой и модифицированного.
Я надеюсь, что поможет кому-то еще нравлюсь.
Файла Docker &ампер;остатки→; (строить) &ампер;остатки→; изображения &ампер;остатки→; (запустить) &ампер;остатки→; контейнер.
Файла Docker: содержит комплекс Докер инструкции, положения вашей операционной системы, как вам нравится, и установит/настроит все программное обеспечение.
Изображения: скомпилированного файла Docker. Экономит ваше время от восстановление файла Docker каждый раз, когда вам нужно запустить контейнер. И это's не способ, чтобы скрыть ваш код положения.
Контейнер: виртуальная операционная система сама. Вы можете войти по SSH и запускать любые команды, которые вы хотите, как если бы это's в реальной среде. Вы можете запустить 1000+ контейнеры из того же изображения.
Основная концепция Докер, чтобы сделать его легким для создания "машины" и что, в этом случае можно считать контейнеров. Контейнер со СПИДом в повторное использование, что позволяет создавать и удалять контейнеры с легкостью.
Изображения изображают состояние контейнера в каждый момент времени. Так что основной рабочий процесс:
Контейнер-это просто исполняемый файл, который будет выполняться на хост-ОС под набор ограничений, заданных с помощью приложения (например, настройки), что знает, как определить ОС, какие ограничения в применении.
Типичными ограничениями являются процессом изоляции обзоры, связанные с безопасностью (например, использование 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_(программного обеспечения)
Как много ответов на это обратил внимание: вы строение файла Docker получить изображения и запустить изображения получить контейнер.
Однако, следующие шаги помогли мне получить лучшее понимание того, что докер изображения и контейнер:
докер построить -Т my_image dir_with_dockerfile
.файл tar
докер спасти -о my_file.деготь my_image_id
my_file.тар
будут храниться изображения. Открыть его с тар-xvf my_file.тар`, и вы увидите все слои. Если вы погрузитесь глубже в каждый слой можно увидеть, какие изменения были добавлены в каждом слое. (Они должны быть довольно близко к команды в файла Docker).
судо докер Run-это my_image Баш
и вы видите, что это очень похоже на ОС.
Изображения - это эквивалент определение класса в ООП и слои разные методы и свойства этого класса.
Контейнер - это фактический экземпляр изображения, так как объект является экземпляром или экземпляром класса.
Docker образ упаковывает приложение и условий, необходимых для выполнения приложения, и контейнер работающий экземпляр изображения.
Изображения упаковки часть Докер, исходный код" или "Мои программы" аналогично, чтобы ";. Контейнеры являются выполнение части Докер, аналогично и "Процесс" по.
Вопрос, только в "программе" относится к и что'с изображением. В "Бег" в части докер контейнер. Когда контейнер запущен, и изменения будут внесены, это's, как если бы процесс вносит изменение в свой собственный исходный код и сохранить его как новое изображение.
Как в плане программирования,
Изображения исходный код.
Когда исходный код компиляции и сборки, он называется приложение.
Похожие на что "когда экземпляр создается для имиджа", он называется " поконтейнери".
Я думаю, что это лучше объяснить в начале.
Предположим, что вы выполните команду докер запустить Привет мир
. Что происходит?
Он называет командной строки Docker, который несет ответственность команды Docker и преобразование вызова *настройки сервера команды. Как только настройки сервера получает команду на запуск изображения, он проверяет погоду изображения кешем имеет изображения** с таким названием.
Предположим привет-мира не существует. Настройки сервера идет Докер-концентратор (Докер-концентратор-это просто бесплатное хранилище изображений) и спрашивает, Эй ступицы, есть ли у вас изображения под названием Привет мир
?
Ответы концентратор - да, я делаю. Тогда дай его мне, пожалуйста. И процесс загрузки начнется. Как только Docker-образ загружен, настройки сервера ставит его в кэш изображения.
Так что прежде, чем мы объяснить, что образы Docker и Docker контейнеры, позвольте'ы начать с введения об операционной системе на компьютере, и как она работает программное обеспечение.
При запуске, например, хром на вашем компьютере, он называет операционной системы, сама операционная система вызывает ядра и спрашивает, Эй я хочу, чтобы запустить эту программу. Ядра удается запустить файлы с вашего жесткого диска.
А теперь представьте, что у вас есть две программы, Chrome и Node.js. Хром необходим Python версии 2, чтобы запустить и Node.js требуется Python версии 3 для запуска. Если у вас есть только установить Python V2 на ваш компьютер, будет запущен только хром.
Чтобы сделать обоих случаях работы, то вам необходимо использовать функции операционной системы, известной как пространство имен. Пространство имен-это функция, которая дает возможность изолировать процессы, жесткого диска, сети, пользователей, хостов и так далее.
Поэтому, когда мы говорим о изображения мы на самом деле говорить о моментальных снимков файловой системы. В изображения - это физический файл, который содержит инструкции и метаданные для создания определенного контейнер. В контейнер сам экземпляр изображения; она изолирует жесткий диск, используя пространства имен, которая доступна только для этой контейнер. Так что контейнер - это процесс или набор процессов, которые группами разных ресурсов, возложенные на него.
В изображения - это на "снимок" из а контейнер. Вы можете делать снимки из контейнера (новых и"скриншоты"), и вы также можете начать новые контейнеры из образа (создания группы «снимок" - а).
Например, вы можете создать новый контейнер из базового изображения, выполнять некоторые команды в контейнер, а потом снимков, как новый образ. Затем вы можете запустить 100 контейнеров из нового изображения.
Другие вещи, чтобы рассмотреть:
Короче:
Контейнер является подразделением (виртуальный) в ядре, которая разделяет общую ОС и работает образу (Докер).
Контейнер-это самодостаточное приложение, которое будет иметь пакеты и все необходимые зависимости, а также для выполнения кода.
Контейнер Docker работает экземпляр изображения. Вы можете связать изображение с программой и контейнер с процессом :)