Ответ
Для развертывания конфигурации Docker Compose на нескольких машинах используют инструменты автоматизации и оркестрации. Выбор зависит от сложности инфраструктуры и требований к отказоустойчивости.
1. Системы управления конфигурацией (Ansible)
Это декларативный и идемпотентный подход, который является отраслевым стандартом для автоматизации.
Почему это хорошо:
- Надежность: Ansible гарантирует, что состояние серверов будет соответствовать описанному в плейбуке.
- Масштабируемость: Легко управляет десятками и сотнями машин.
Пример плейбука deploy.yml:
- name: Deploy Docker Compose application
hosts: all
become: true
tasks:
- name: Create application directory
file:
path: /opt/app
state: directory
- name: Copy docker-compose.yml to remote host
copy:
src: ./docker-compose.yml
dest: /opt/app/docker-compose.yml
- name: Run docker-compose up
community.docker.docker_compose:
project_src: /opt/app
state: present
2. Скрипты (Bash + SSH/SCP)
Подходит для простых задач или сред, где нет возможности установить Ansible.
Почему это хорошо:
- Простота: Не требует установки дополнительных агентов, только SSH-доступ.
Пример скрипта:
#!/bin/bash
set -e # Прервать выполнение при ошибке
SERVERS=("user@vm1.example.com" "user@vm2.example.com")
for server in "${SERVERS[@]}"; do
echo "Deploying to $server..."
scp ./docker-compose.yml "$server:/opt/app/"
ssh "$server" "cd /opt/app && docker-compose up -d --pull always"
done
echo "Deployment finished."
3. Оркестрация (Docker Swarm)
Нативное решение от Docker для создания кластера из нескольких машин. Docker Compose файлы используются для определения "стеков" сервисов.
Почему это хорошо:
- Встроенные возможности: Обеспечивает балансировку нагрузки, отказоустойчивость и масштабирование "из коробки".
Пример использования:
# 1. На управляющей ноде инициализируем Swarm
# docker swarm init
# 2. Разворачиваем стек из файла docker-compose.yml
docker stack deploy -c docker-compose.yml my_app_stack