docker run может быть сложным и утомительным.docker-compose.yml и использует Docker API для создания и управления контейнерами.docker-compose --versionversion: Указывает версию синтаксиса файла 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 необходимо для эффективной работы с несколькими связанными контейнерами.