Docker — это платформа для запуска приложений в изолированных контейнерах. С ее помощью разработчик может упаковать приложение вместе с необходимыми библиотеками, зависимостями и настройками, а затем запускать этот набор практически в любом окружении, где установлен Docker.
Главная идея Docker проста: приложение должно работать одинаково на компьютере разработчика, тестовом сервере и в production. Контейнер помогает убрать классическую проблему «у меня на компьютере все работает».
Как работает Docker
Docker использует образы и контейнеры.
Docker image, или образ, — это шаблон, из которого создается контейнер. В образе находятся файловая система, приложение, библиотеки и другие необходимые компоненты.
Docker container, или контейнер, — запущенный экземпляр образа.
Например, можно взять официальный образ Nginx:
docker pull nginx
После этого запустить контейнер:
docker run -d --name web -p 8080:80 nginx
Теперь Nginx работает внутри контейнера, а сайт доступен на порту 8080 хост-системы.
Проверить контейнеры можно командой:
docker ps
Остановить контейнер:
docker stop web
Удалить:
docker rm web
Чем контейнер отличается от виртуальной машины
Контейнер и виртуальная машина решают похожую задачу — изоляцию приложений, но работают по-разному.
Виртуальная машина обычно содержит полноценную гостевую операционную систему. Контейнер использует ядро операционной системы хоста и изолирует процессы, файловую систему, сеть и другие ресурсы.
Поэтому контейнеры обычно запускаются быстрее и требуют меньше ресурсов, чем полноценные виртуальные машины.
Это не означает, что Docker полностью заменяет виртуализацию. Виртуальные машины и контейнеры часто используются вместе.
Основные понятия Docker
Чтобы уверенно работать с Docker, достаточно сначала разобраться с несколькими понятиями.
Image
Образ — неизменяемый шаблон для создания контейнеров.
Посмотреть локальные образы:
docker images
Загрузить образ:
docker pull redis
Container
Контейнер создается из образа:
docker run redis
Один образ может использоваться для запуска множества контейнеров.
Dockerfile
Dockerfile содержит инструкции для создания собственного образа.
Пример:
FROM nginx:alpine
COPY ./site /usr/share/nginx/html
Собрать образ:
docker build -t my-site .
Подробнее о создании образов рассказываем в статье «Dockerfile: как создать собственный Docker-образ».
Volume
Контейнеры могут быть временными. Если данные должны сохраняться после удаления контейнера, используют volumes.
Например:
docker volume create app-data
Подробнее о постоянном хранении данных — в статье «Docker volumes: что это такое и как использовать».
Network
Контейнеры могут взаимодействовать друг с другом через Docker-сети.
Например, приложение может подключаться к PostgreSQL по имени контейнера или сервиса:
postgres:5432
Подробнее — в статье «Docker networks: сети контейнеров и связь между сервисами».
Docker Compose
Если приложение состоит из нескольких компонентов, запускать каждый контейнер вручную неудобно.
Например, веб-приложению могут понадобиться:
- Nginx;
- PHP;
- PostgreSQL;
- Redis.
Docker Compose позволяет описать такую инфраструктуру в YAML-файле и запускать ее одной командой.
docker compose up -d
Подробнее о Compose — в статье «Docker Compose: что это и как использовать».
Где используется Docker
Docker применяется в разработке, тестировании и развертывании приложений.
Типичные сценарии:
- локальная разработка;
- запуск тестовых окружений;
- CI/CD;
- размещение веб-сайтов;
- запуск баз данных;
- микросервисная архитектура;
- изоляция приложений;
- автоматизация серверной инфраструктуры.
Например, разработчику не обязательно устанавливать PostgreSQL непосредственно в операционную систему. Можно запустить базу в контейнере и удалить ее после завершения работы.
Преимущества Docker
Переносимость
Один и тот же образ можно использовать в разных окружениях.
Изоляция
Приложения работают в отдельных контейнерах и меньше влияют друг на друга.
Быстрый запуск
Контейнер обычно запускается значительно быстрее полноценной виртуальной машины.
Воспроизводимость
Инфраструктуру можно описать в Dockerfile и Compose-файлах и затем воспроизвести на другом сервере.
Удобное масштабирование
При необходимости можно запустить несколько экземпляров сервиса.
Недостатки Docker
Docker не является универсальным решением.
Нужно учитывать:
- контейнеры требуют грамотной настройки безопасности;
- данные нельзя бездумно хранить внутри контейнера;
- сетевую конфигурацию необходимо понимать;
- production-среда требует мониторинга и резервного копирования;
- большое количество контейнеров усложняет управление.
Для одного сервера часто достаточно Docker Compose. Для более сложной инфраструктуры можно рассматривать Docker Swarm или другие системы оркестрации.
О Docker Swarm рассказываем в статье «Docker Swarm: что это и когда нужен».
Docker или виртуальная машина
Упрощенно:
| Docker | Виртуальная машина |
|---|---|
| Контейнеры | Виртуальные машины |
| Меньше накладных расходов | Больше накладных расходов |
| Быстрый запуск | Более медленный запуск |
| Общий kernel хоста | Отдельная гостевая ОС |
| Удобен для приложений | Удобна для полной изоляции ОС |
На практике технологии не обязательно конкурируют. Например, Docker может работать внутри виртуальной машины на облачном сервере.
Итог
Docker позволяет упаковывать приложения в контейнеры и управлять их запуском, сетью, хранением данных и конфигурацией.
Для начала достаточно освоить базовые команды:
docker pull
docker run
docker ps
docker stop
docker rm
docker images
docker logs
docker exec
Следующий шаг — установка Docker на компьютер или сервер. После этого можно перейти к Docker Compose, Dockerfile, volumes и networks.
Читайте также:



