Docker - программное обеспечение с открытым исходным кодом, предназначенное для упрощения и ускорения разработки приложений. Это набор продуктов PaaS (Platform as a Service) - Платформа как услуга, которые создают изолированные виртуализированные среды для создания, развертывания и тестирования приложений.
Несмотря на то, что программное обеспечение относительно просто в управлении, существуют некоторые специфичные для Docker термины, в которых путаются новые пользователи. Докерфайлы, образы, контейнеры, тома и другая терминология должны быть освоены раз и навсегда.
Понимание элементов Docker ускорит обучение работе с ним. Первый вопрос, который задают многие пользователи: "В чем разница между образом Docker и контейнером?"
Что такое Docker Image
Образ Docker (Docker Image) - это неизменяемый файл, содержащий исходный код, библиотеки, зависимости, инструменты и другие файлы, необходимые для запуска приложения.
Из-за того, что образы предназначены только для чтения их иногда называют снимками (snapshot). Они представляют приложение и его виртуальную среду в определенный момент времени. Такая согласованность является одной из отличительных особенностей Docker. Он позволяет разработчикам тестировать и экспериментировать программное обеспечение в стабильных, однородных условиях.
Так как образы являются просто шаблонами, их нельзя создавать или запускать. Этот шаблон можно использовать в качестве основы для построения контейнера. Контейнер - это, в конечном счете, просто образ. При создании контейнера поверх образа добавляет слой, доступный для записи, что позволяет менять его по своему усмотрению.
Образ - это шаблон, на основе которого создается контейнер, существует отдельно и не может быть изменен. При запуске контейнерной среды внутри контейнера создается копия файловой системы (docker образа) для чтения и записи.
Можно создать неограниченное количество образов Docker из одного шаблона. Каждый раз при изменении начального состояния образа и сохранении существующего состояния создается новый шаблон с дополнительным слоем поверх него.
Таким образом, образы Docker могут состоять из ряда слоев, каждый из которых отличается от предыдущего. Слои образа представляют файлы, доступные только для чтения, поверх которых при создании контейнера добавляется новый слой.
Что такое Docker Container?
Контейнер Docker (Docker Container) - это виртуализированная среда выполнения, в которой пользователи могут изолировать приложения от хостовой системы. Эти контейнеры представляют собой компактные портативные хосты, в которых можно быстро и легко запустить приложение.
Важной особенностью контейнера является стандартизация вычислительной среды, работающей внутри контейнера. Это не только гарантирует, что ваше приложение работает в идентичных условиях, но и упрощает обмен данными с другими партнерами по команде.
Контейнеры работают автономно, изолированно от основной системы и других контейнеров, и потому ошибка в одном из них не влияет на другие работающие контейнеры, а также поддерживающий их сервер. Docker утверждает, что эти блоки «обеспечивают самые сильные возможности изоляции в отрасли». Поэтому при разработке приложения вам не придется беспокоиться о безопасности компьютера.
В отличие от виртуальных машин, где виртуализация выполняется на аппаратном уровне, контейнеры виртуализируются на уровне приложений. Они могут использовать одну машину, совместно использовать ее ядро и виртуализировать операционную систему для выполнения изолированных процессов. Это делает контейнеры чрезвычайно легкими, позволяя сохранять ценные ресурсы.
Образа Docker в сравнении с Docker контейнерами
Говоря о разнице между образами и контейнерами, было бы неверно противопоставлять их друг-другу. Оба элемента тесно связаны между собой и являются основными шестерёнками Docker.
Из определения терминов образ и контейнер выше, легко установить связь между ними: образы могут существовать без контейнеров, тогда как для существования контейнеров необходимо запустить образ. Поэтому контейнеры зависят от изображений и используют их для создания среды выполнения и запуска приложения.
Эти две концепции существуют как важные компоненты (или, скорее, фазы) в процессе запуска контейнера Docker. Наличие рабочего контейнера является конечной «фазой» этого процесса, указывая, что он зависит от предыдущих этапов и компонентов. Именно поэтому образ docker по существу управляют контейнерами и формируют их.
Из Dockerfile к образу и контейнеру
Все начинается с последовательности инструкций, определяющих способ построения определенного образа Docker – Dockerfile. Данный файл автоматически выполняет команды скрипта и создает образ Docker.
Для создания образа из Dockerfile используется команда docker build.
Эта среда - не просто виртуальное «пространство». Она полностью зависит от образа, на базе которого была создана. Исходный код, файлы, зависимости и двоичные библиотеки, которые находятся в образе Docker, составляют контейнер.
Чтобы создать слой контейнера из образа, используйте команду docker create
.
Наконец, после запуска контейнера из существующего образа вы запускаете его службу и запускаете приложение.
Создание образа из контейнера.
Если вы вносите изменения в исходный образ и хотите сохранить его для дальнейшей работы, можно сохранить измененный образ, сделав снимок текущего состояния контейнера. Таким образом, слой контейнера прикрепляется поверх образа, в конечном итоге создавая новый неизменяемый образ. В результате получается два образа Docker, полученные из одной файловой системы.
Заключение
Данная статья должна помочь понять, что такое образ Docker, что такое контейнер и как они связаны. Если поймете процесс создания контейнера, поймете разницу между образом и контейнером.