Ответ
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, так как они обеспечивают консистентность окружения на всех этапах (разработка, тестирование, продакшн).