Docker Compose — это инструмент, который позволяет определять и настраивать многоконтейнерные приложения Docker. Он использует файл YAML для настройки контейнеров, сетей и томов приложения.
Чтобы установить Docker Compose на Debian 10,
- Установить Docker
 - Загрузите двоичный файл Docker Compose в каталог на системном пути и сделайте его исполняемым.
 - Скачать и запустить контерйнер Заббикса.
 
1. установить Docker
- Установите пакеты, необходимые для добавления нового репозитория через HTTPS:
sudo apt updatesudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg2 - Импортируйте ключ GPG репозитория с помощью следующей 
curlкоманды :curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -В случае успеха команда вернется
OK. - Добавьте стабильный репозиторий Docker APT в список репозиториев программного обеспечения вашей системы:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"вернет имя дистрибутива Debian . В данном случае это так
$(lsb_release -cs)buster. - Обновите 
aptсписок пакетов и установите последнюю версию Docker CE (Community Edition):sudo apt updatesudo apt install docker-ce - После завершения установки служба Docker запустится автоматически. Чтобы проверить это, введите:
sudo systemctl status docker● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-07-30 20:52:00 GMT; 1min 11s ago Docs: https://docs.docker.com ... - На момент написания последней стабильной версии Docker была 
19.03.1:docker -vDocker version 19.03.1, build 74b1e89 
Выполнение команды Docker без Sudo
По умолчанию только root и пользователь с привилегиями sudo могут выполнять команды Docker.
Если вы хотите выполнять команды Docker без предварительной записи, sudo  вам необходимо добавить своего пользователя в группу докеров, которая создается во время установки пакета Docker CE. Для этого введите:
sudo usermod -aG docker $USER
 — это переменная среды, в которой хранится ваше имя пользователя.
$USER
Выйдите из системы и войдите снова, чтобы обновить членство в группе.
После этого убедитесь, что вы можете запускать docker команды без sudo ввода:
docker container run hello-world
Команда загрузит тестовое изображение, запустит его в контейнере, напечатает сообщение «Hello from Docker» и завершит работу. Результат должен выглядеть следующим образом:

Использование Docker
Теперь, когда вы установили на свой Debian 10, давайте рассмотрим основные концепции и команды докеров.
Образы Docker
Образ Docker состоит из ряда слоев файловой системы, представляющих инструкции в файле Dockerfile образа, которые составляют исполняемое программное приложение. Изображение — это неизменяемый двоичный файл, включающий приложение и все другие зависимости, такие как библиотеки, двоичные файлы и инструкции, необходимые для запуска приложения.
Большинство образов Docker доступны в Docker Hub . Это облачная служба реестра, которая, среди прочего, используется для хранения образов Docker в общедоступном или частном репозитории.
Чтобы найти изображение в реестре Docker Hub, используйте docker search команду. Например, чтобы найти образ Debian, вы должны ввести:
docker search debian
Контейнеры Docker
Экземпляр изображения называется контейнером. Контейнер представляет среду выполнения для отдельного приложения, процесса или службы.
Возможно, это не самое подходящее сравнение, но если вы программист, вы можете думать об образе Docker как о классе, а контейнер Docker как об экземпляре класса.
Для запуска, остановки, удаления и управления контейнером используйте docker container команду. Например, следующая команда запустит контейнер Docker на основе образа Debian. Если у вас нет образа локально, сначала он будет загружен:
docker container run debian
Контейнер Debian остановится сразу после загрузки, потому что у него нет длительного процесса, и никакая другая команда не предоставляется. Контейнер загрузился, запустил пустую команду и завершил работу.
Переключатель -it позволяет взаимодействовать с контейнером через командную строку. Чтобы запустить интерактивный контейнер, введите:
docker container run -it debian /bin/bash
root@ee86c8c81b3b:/#
Как видно из выходных данных выше, после запуска контейнера командная строка изменяется, что означает, что теперь вы работаете изнутри контейнера .
Чтобы вывести список запущенных контейнеров Docker , используйте следующую команду:
docker container ls
Если у вас нет запущенных контейнеров, вывод будет пустым.
Чтобы просмотреть все контейнеры, передайте ему -a переключатель:
docker container ls -a
Чтобы удалить один или несколько контейнеров, просто скопируйте идентификатор контейнера (или идентификаторы) и вставьте их после container rm команды:
docker container rm c55680af670c
2. Установка Docker Compose
Установочный пакет Docker Compose доступен в официальных репозиториях Debian 10, но он не всегда может быть последней версией. Рекомендуемый подход — установить Docker Compose из репозитория Docker GitHub.
На момент написания этой статьи последней стабильной версией Docker Compose является версия 1.23.1 . Перед загрузкой двоичного файла Compose посетите страницу выпуска репозитория Compose на GitHub и проверьте, доступна ли для загрузки новая версия.
Выполните следующие действия, чтобы установить последнюю версию Docker Compose в Debian 10:
- Загрузите двоичный файл Docker Compose в 
/usr/local/binкаталог с помощьюwgetилиcurl:curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -Используйте
chmodдля создания исполняемого двоичного файла Compose:chmod +x docker-compose-linux-x86_64Перенести в папку приложений:mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose - Чтобы проверить установку, используйте следующую команду, которая выводит версию Compose:
docker-compose --versionРезультат будет выглядеть примерно так:
$ docker-compose version Docker Compose version v2.4.1Начало работы с Docker Compose 
В этом разделе мы покажем, как настроить локальную среду разработки WordPress с помощью Docker Compose.
Создайте каталог для проекта и перейдите в него :
mkdir wordpress_app && cd wordpress_app
Откройте текстовый редактор и создайте файл с именем docker-compose.yml :
nano docker-compose.yml
Вставьте следующий контент:
docker-compose.yml
version: '3.7'
services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
  wordpress:
    image: wordpress
    restart: always
    volumes:
      - ./wp_data:/var/www/html
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: password
    depends_on:
       - db
volumes:
    db_data:
    wp_data:
Давайте объясним код построчно
В первой строке указывается версия файла Compose . Существует несколько различных версий формата файла Compose с поддержкой определенных выпусков Docker.
Далее мы определяем две службы db и wordpress . Каждая служба создает отдельный контейнер при запуске Docker Compose.
db:
- Изображение настроено на 
mysql:8.0изображение. Если изображение отсутствует, Compose извлечет его из общедоступного репозитория Docker Hub. Строка, начинающаяся с,commandотменяет команду по умолчанию. restart: alwaysПолитика инструктирует Compose перезапустить контейнер , если он идет вниз.- Контейнер будет использовать именованный том 
db_dataдля сохранения базы данных. - Определяет переменные среды для 
mysql:8.0изображения. 
wordpress:
- Использует 
wordpressизображение. - Монтирует 
wp_dataкаталог на хосте/var/lib/mysqlвнутри контейнера. - Перенаправляет открытый порт 
80на контейнере на порт8080на хост-машине. - Определяет переменные среды для 
wordpressизображения. depends_onИнструкция определяет зависимость между двумя службами. В этом примереdbбудет запущен раньшеwordpress.
Из каталога проекта запустите стек WordPress, выполнив следующую команду:
docker-compose up
Результат должен выглядеть примерно так:
...
] /usr/sbin/mysqld: ready for connections. Version: '8.0.18'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
db_1_99946702ac7e | 2019-12-15T21:37:29.109255Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
...
Docker Compose извлечет изображения, запустит контейнеры и создаст wp_data каталог в каталоге вашего проекта.
Войдите http://0.0.0.0:8080/ в свой браузер, и вы увидите стандартный экран установки WordPress.
На данный момент приложение WordPress запущено и работает, и вы можете начать работать над ним.
Чтобы остановить создание, нажмите CTRL+C .
Вы также можете запустить Compose в автономном режиме, используя -d опцию:
docker-compose up -d
Чтобы просмотреть запущенные контейнеры докеров, используйте следующую команду:
docker-compose ps
                 Name                               Command               State          Ports        
------------------------------------------------------------------------------------------------------
wordpress_app_db_1_99946702ac7e          docker-entrypoint.sh --def ...   Up      3306/tcp, 33060/tcp 
wordpress_app_wordpress_1_a428d8408817   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp 
Чтобы остановить службы, когда Compose работает в автономном режиме, используйте:
docker-compose stop
Если вы хотите полностью удалить контейнеры, используйте down опцию:
docker-compose down
При --volumes передаче переключателя также удаляем объемы данных:
docker-compose down --volumes
Удаление Docker Compose
Если вам нужно удалить Docker Compose, вы можете просто удалить двоичный файл, набрав:
sudo rm /usr/local/bin/docker-compose
3.
Установка
Склонируйте репозиторий github.com/zabbix/zabbix-docker в директорию opt:
cd /opt/git clone https://github.com/zabbix/zabbix-docker | 
Далее выберите подходящий вам docker-файл (я выбрал docker-compose_v3_alpine_mysql_latest) и запустите его; при желании можно сделать его копию, указав другое имя, чтобы не путаться среди такого большого количества docker-файлов, а так же указать пути до разделов (по умолчанию данные zabbix будут хорониться в директории ./zbx_env/*)
docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d | 
Далее выждав какое-то время вы можете войти в web-интерфейс и приступить к настройке zabbix server.
Настройка systemd сервиса
Казалось бы все, но в случае перезапуска сервера контейнеры не будут запускаться автоматически. Обойти это можно создав systemd — unit который будет запускать docker-compose файл при загрузке системы.
Создаем файл /etc/systemd/system/zabbix-compose.service и вставляем в него следующее содержимое:
[Unit]Description=Zabbix services with docker-composeRequires=docker.serviceAfter=docker.service[Service]WorkingDirectory=/opt/zabbix-docker/User=rootGroup=dockerType=oneshotRemainAfterExit=yesExecStartPre=/usr/local/bin/docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml down -v# Compose upExecStart=/usr/local/bin/docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d# Compose down, remove containersExecStop=/usr/local/bin/docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml down[Install]WantedBy=multi-user.target | 
Теперь выполним следующие команды:
systemctl enable zabbix-compose.servicesystemctl daemon-reloadsystemctl start zabbix-compose.service | 
Как редактировать параметры zabbix?
Если вам необходимо установить какие-то нестандартные значения параметров, то сделать это можно в env файлах, которые находятся в директории ./env_vars/. К примеру, если мне надо увеличить CacheSize то сделать я это могу в файле env_vars/.env_srv отредактировав значение переменной ZBX_CACHESIZE.
Все. Теперь можно приступить к настройке сервера.
Источники:
https://baks.dev/article/debian/how-to-install-and-use-docker-compose-on-debian-10-linux
https://maxidrom.net/archives/1819