docker run
может быть сложным и утомительным.docker-compose.yml
и использует Docker API для создания и управления контейнерами.docker-compose --version
version
: Указывает версию синтаксиса файла Docker Compose. Рекомендуется использовать последнюю стабильную версию.services
: Определяет отдельные сервисы (контейнеры), составляющие приложение. Каждый сервис имеет свою конфигурацию.networks
: Определяет пользовательские сети, которые могут использоваться сервисами для взаимодействия.volumes
: Определяет именованные тома, которые могут использоваться сервисами для постоянного хранения данных.image
: Имя Docker-образа, который будет использоваться для запуска контейнера сервиса (например, nginx:latest
, postgres:13
).build
: Определяет параметры сборки образа из Dockerfile. Может быть указан путь к Dockerfile или контекст сборки и путь к Dockerfile внутри контекста.
yaml
build: ./web
# или
build:
context: ./api
dockerfile: Dockerfile.prod
ports
: Определяет порты, которые будут проброшены с хостовой машины на контейнер. Формат: hostPort:containerPort
или hostPort:containerPort/protocol
(tcp, udp).
yaml
ports:
- "80:80"
- "443:443"
- "5432:5432/tcp"
volumes
: Определяет монтирование томов. Может быть именованный том (определенный в секции volumes
), bind mount (путь на хосте) или анонимный том.
yaml
volumes:
- db_data:/var/lib/postgresql/data
- ./app:/app
- my_anonymous_volume:/data
environment
: Определяет переменные окружения для контейнера.
yaml
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mysecretpassword
depends_on
: Определяет зависимости между сервисами. Docker Compose попытается запустить зависимые сервисы перед текущим.
yaml
depends_on:
- database
restart
: Определяет политику перезапуска контейнера при сбое (no
, on-failure
, always
, unless-stopped
).
yaml
restart: always
networks
: Указывает сети, к которым будет подключен сервис.
yaml
networks:
- frontend
- backend
command
: Переопределяет команду, определенную в Dockerfile.
yaml
command: ["python", "manage.py", "runserver", "0.0.0.0:8000"]
entrypoint
: Переопределяет entrypoint, определенный в Dockerfile.
yaml
entrypoint: ["/docker-entrypoint.sh"]
bridge
(по умолчанию), host
, overlay
, ipvlan
, macvlan
.yaml
networks:
frontend:
driver: bridge
backend:
driver: bridge
yaml
volumes:
db_data:
docker-compose up
: Создает и запускает все сервисы, определенные в docker-compose.yml
.-d
или --detach
: Запускает сервисы в фоновом режиме.docker-compose down
: Останавливает и удаляет контейнеры, сети и тома, созданные командой up
.--rmi all
: Удаляет все образы, использованные сервисами.-v
: Удаляет именованные тома.docker-compose start <service...>
: Запускает один или несколько остановленных сервисов.docker-compose stop <service...>
: Останавливает один или несколько запущенных сервисов.docker-compose restart <service...>
: Перезапускает один или несколько сервисов.docker-compose ps
: Отображает статус запущенных сервисов.docker-compose logs <service...>
: Отображает логи указанных сервисов.-f
или --follow
: Следит за логами в реальном времени.docker-compose build <service...>
: Собирает (или пересобирает) образы указанных сервисов.docker-compose pull <service...>
: Загружает образы сервисов, если они еще не существуют или если есть более новая версия.docker-compose scale <service>=<num>
: Масштабирует указанный сервис до заданного количества экземпляров.docker-compose exec <service> <command>
: Выполняет команду внутри запущенного контейнера сервиса.docker-compose config
: Проверяет и отображает объединенную конфигурацию.version: "3.8" services: web: image: nginx:latest ports: - "80:80" volumes: - ./html:/usr/share/nginx/html:ro depends_on: - app networks: - frontend app: build: ./app environment: DATABASE_URL: postgres://user:password@db:5432/mydb depends_on: - db networks: - frontend - backend db: image: postgres:13 volumes: - db_data:/var/lib/postgresql/data environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydb networks: - backend networks: frontend: driver: bridge backend: driver: bridge volumes: db_data:
nginx:latest
, пробрасывает порт 80:80
, монтирует локальную директорию ./html
в /usr/share/nginx/html
(только для чтения), зависит от сервиса app
и подключен к сети frontend
.Dockerfile
, находящегося в директории ./app
, имеет переменную окружения DATABASE_URL
для подключения к базе данных, зависит от сервиса db
и подключен к сетям frontend
и backend
.postgres:13
, монтирует именованный том db_data
в /var/lib/postgresql/data
для хранения данных, имеет переменные окружения для настройки PostgreSQL (POSTGRES_USER
, POSTGRES_PASSWORD
, POSTGRES_DB
) и подключен к сети backend
.docker-compose.yml
с описанием всех сервисов вашего приложения.Dockerfile
для ваших собственных сервисов (например, app
в примере).docker-compose up -d
.docker-compose logs <service>
.docker-compose down
.
Docker Compose значительно упрощает управление многоконтейнерными Docker-приложениями. Файл docker-compose.yml
является центральным элементом для определения конфигурации приложения. Понимание основных секций и команд Docker Compose необходимо для эффективной работы с несколькими связанными контейнерами.