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

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

Подробнее о Docker »

Почему используются образы и контейнеры Docker?

Контейнеры позволяют разработчикам упаковывать программное обеспечение для работы в любой целевой системе. Раньше вам приходилось упаковывать программное обеспечение специально для разных целевых систем. Например, если вы хотите, чтобы приложение работало в macOS и Windows, вам нужно было изменить дизайн приложения и упаковать его для разных систем.

Контейнеризация позволяет программному приложению работать в виде микросервисов в распределенных кроссплатформенных аппаратных архитектурах. Поскольку контейнеры очень портативны, эти программные приложения работают практически на любой машине с быстрым развертыванием. Например, корпоративное приложение может содержать сотни микросервисов. Они могут работать в виде контейнеров на нескольких машинах и виртуальных машинах (ВМ) в выделенном центре обработки данных и в облаке.

Как они работают: образы Docker и контейнеры Docker

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

Подробнее о контейнеризации »

Как работают контейнеры Docker

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

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

Подробнее о Kubernetes »

Как работают образы Docker

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

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

Ключевые команды: образы Docker и контейнеры Docker

Для управления контейнерами Docker используются команды с параметрами. Стандартный формат команд – docker [options] [command] [arguments].

Контейнерные команды

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

Команда

Объяснение

docker ps -a

Перечисляет все контейнеры. Пометка -a показывает как работающие, так и неработающие контейнеры. Чтобы отображать только запущенные контейнеры, эту пометку можно опустить.

docker rename [container] [new_name]

Переименовывает данный контейнер в new_name.

docker start [container]

Запускает данный контейнер.

docker stop [container]

Останавливает данный контейнер.

docker wait [container]

Заставляет данный контейнер ждать остановки других работающих контейнеров.

Команды образов

Команд для работы с образами меньше по сравнению с количеством команд для контейнеров.

Docker build -t image_name .

Создает образ Docker с тегом image_name из файлов в текущем каталоге.

docker create [image]

Создает неработающий контейнер из данного образа.

docker run [image] 

Создает и запускает контейнер на основе заданного образа.

Создает контейнеры Docker из образов Docker

Чтобы создать контейнер из определенного образа Docker, запустите движок на машине. Затем используйте базовую команду Docker run.

Вот пример команды:

docker run -it MyImage bash

Эта команда создает контейнер из файла образа с именем MyImage. Пометка -it создает псевдотерминал в работающем контейнере. А если указать bash в качестве команды, в контейнере откроется терминал bash.

Ключевые отличия: образы Docker и контейнеры Docker

Контейнер Docker – это автономное запускаемое программное приложение или сервис. С другой стороны, образ Docker – это шаблон, загруженный в контейнер для его запуска, например набор инструкций.

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

Источник

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

Напротив, контейнеры Docker создаются непосредственно из файла образа Docker. 

Композиция

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

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

Изменяемость

Образы Docker неизменяемы, что означает, что их нельзя изменить после создания. Если необходимо внести изменения в образ, нужно создать новый образ с требуемыми изменениями.

Напротив, контейнеры изменчивы и допускают модификацию во время выполнения. Изменения, внесенные в контейнер, относятся только к этому конкретному контейнеру и не влияют на связанный с ним образ. Некоторые примеры изменений – запись новых файлов, установка программного обеспечения или изменение конфигураций.

Когда использовать: образы Docker и контейнеры Docker

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

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

При этом управление упрощается при использовании образов и контейнеров. Например, ниже указанно, как можно использовать их в комбинации.

  • Масштабируйте приложение по горизонтали, запуская несколько инстансов контейнеров на основе одного и того же образа.
  • Автоматизируйте конвейеры непрерывной интеграции и развертывания (CI/CD), используя различные образы для сред разработки, тестирования и производства.
  • Помечайте различные версии образов и управляйте ими. Это поможет вам откатить или развернуть определенные версии по мере необходимости.

Краткое описание различий: образы Docker и контейнеры Docker

 

Образ Docker

Контейнер Docker

Что это

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

Инстанс среды выполнения; автономное программное обеспечение.

Создано с помощью нижеуказанного:

Программный код, зависимости, библиотеки и Dockerfile

Образ

Композиция

Слои, доступные только для чтения

Слои, доступные только для чтения, с дополнительным слоем для чтения и записи

Изменяемость

Неизменяемость Если есть изменения, вам необходимо создать новый файл.

Изменяемый; вы можете изменить его во время выполнения по мере необходимости.

Принцип использования

Для хранения сведений о конфигурации приложения в виде шаблона. 

Для запуска приложения.

Как AWS может помочь удовлетворить ваши требования к контейнерам и образам?

Amazon Web Services (AWS) предоставляет множество предложений, обеспечивающих безопасное хранение образов контейнеров и управление ими.

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

Реестр эластичных контейнеров Amazon (Amazon ECR) – это полностью управляемый реестр контейнеров, предлагающий высокопроизводительный хостинг. Таким образом, вы можете надежно развертывать образы приложений и артефакты в любом месте. Разработчики, создающие контейнерные приложения, теперь могут находить и загружать официальные образы Docker непосредственно из Amazon ECR Public.

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

Создайте аккаунт и начните работу с Docker на AWS уже сегодня.

AWS: дальнейшие шаги

Начните разработку с образами Docker
Узнайте, как начать работу с сервисом Amazon Elastic Container 
Начало разработки с контейнерами
Узнайте, как начать работу с контейнерами в AWS