Что такое Docker-контейнер и чем он отличается от Docker-образа?

Ответ

Docker-контейнер — это изолированная, легковесная и исполняемая среда, которая содержит все необходимое для запуска приложения: код, среду выполнения, системные инструменты, библиотеки и настройки.

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

Образ vs. Контейнер

Это ключевое различие, которое важно понимать:

  • Docker-образ (Image): Это шаблон или чертеж для создания контейнеров. Он является неизменяемым (immutable) и содержит слои с файловой системой и параметрами запуска. Образы создаются из Dockerfile.
  • Docker-контейнер (Container): Это запущенный экземпляр образа. Можно представить образ как класс в ООП, а контейнер — как объект (экземпляр) этого класса. Можно запустить множество контейнеров из одного и того же образа.

Ключевые особенности контейнеров:

  • Изоляция: Процессы в контейнере не видят процессы в хостовой системе или в других контейнерах.
  • Портативность: Контейнер, созданный на одной машине, будет работать точно так же на любой другой машине, где установлен Docker.
  • Эффективность: Быстрый запуск и остановка, минимальные накладные расходы по сравнению с ВМ.

Пример запуска контейнера:

# Эта команда создает и запускает контейнер с именем 'my-web-server'
# из образа 'nginx' (если его нет, он будет скачан).
# Порт 8080 хоста пробрасывается на порт 80 контейнера.
docker run --name my-web-server -d -p 8080:80 nginx

Контейнеры являются фундаментальной частью современных подходов к разработке, таких как микросервисная архитектура и CI/CD, так как они обеспечивают консистентность окружения на всех этапах (разработка, тестирование, продакшн).