Должен ли я использовать systemd или docker-compose, чтобы контейнеры Docker работали в моих системах?

Речь идет о контейнерах Docker, таких как sysdig, consul, fluentd, mesos-slave и т. д., которые мы запускаем практически на всех машинах.

В настоящее время мы используем Upstart от Ubuntu и Fleetctl от CoreOS. Мы переходим на Ubuntu 18.04 LTS и в настоящее время думаем, следует ли преобразовать конфигурацию в:

  • Systemd или
  • Docker-компоновать

Systemd может выполнять проверки работоспособности и автоматически возвращать процессы, которые умерли, в оперативный режим. Он также больше всего похож на Upstart, который мы активно используем. Наши файлы конфигурации Upstart генерируются из cloud-config следующим образом:

- >
    /usr/local/bin/generate-docker-upstart fluentd registry/fluentd:1.0.1
    -e HOST=elasticsearch
    -e PORT=9200
    -e INDEX=fluentd
    -e NODE=`hostname -s`
    -e ROLE=app
    -e ENVIRONMENT={{Ref:Environment}}
    -e TENANT={{Ref:Tenant}}
    -p 24224:24224
    --name \$NAME \$IMAGE

Мы используем AWS CloudFormation для подключения виртуальных машин к сети.

Мы не можем использовать реальную структуру оркестрации контейнеров (мы уже используем Marathon/Mesos), потому что эти службы должны работать на каждом хосте и до запуска Marathon/Mesos.

Какое решение наиболее целесообразно? Преобразовать эти файлы в systemd или начать использовать docker-compose, несмотря на то, что вы уже используете Marathon на Mesos?


person Dennis    schedule 24.09.2018    source источник
comment
Запросы рекомендаций по инструментам здесь явно не по теме, поскольку № 4 в некоторых вопросах по-прежнему не по теме списка на stackoverflow.com/help/ по теме. Любой из этих подходов можно заставить работать. Какой из них вам следует использовать, зависит от индивидуальных мнений тех, кто отвечает на вопросы. (Есть некоторые дополнительные инструменты, необходимые для переноса экземпляра Docker в systemd без нежелательных побочных эффектов, вызванных взаимодействием между тем, как docker и systemd обрабатывают контрольные группы, но эти инструменты работают довольно хорошо).   -  person Charles Duffy    schedule 25.09.2018


Ответы (2)


Политика перезапуска — это встроенный метод, позволяющий поддерживать работу контейнеров Docker.

docker run --restart=always -d image_name

подробности см. в документах.

person Artemiy Rodionov    schedule 24.09.2018

Отказ от ответственности: я не разбираюсь в systemd, поэтому мой ответ будет заключаться в том, чтобы обобщить некоторые функции docker-compose и дать несколько советов.

Вы сказали

Мы не можем использовать настоящую структуру оркестрации контейнеров […] Какое решение наиболее целесообразно? Преобразовать эти файлы в systemd или начать использовать docker-compose, несмотря на то, что вы уже используете Marathon на Mesos?

но можно отметить, что docker-compose сам по себе является инструментом оркестрации контейнеров (хотя и более легким, чем некоторые другие решения для оркестровки).

Systemd может выполнять проверки работоспособности и автоматически возвращать процессы, которые умерли, в оперативный режим. Он также больше всего похож на Upstart, который мы активно используем. Наши файлы конфигурации Upstart генерируются из облачной конфигурации следующим образом: […]

Возможно, у вас уже есть некоторое представление о docker-compose, но для полноты картины его можно рассматривать как «интерфейс Docker», реализованный на Python, который позволяет:

  1. замените сложные команды Docker (такие как docker build, docker run и т. д.) декларативными конфигурациями в YAML. Дополнительные сведения об этой выразительной спецификации см. в документе.

  2. управлять всем жизненным циклом многоконтейнерных приложений (возможно, используя настраиваемые сети, тома и т. д.). В частности, можно указать docker-compose всегда перезапускать данный контейнер в случае ошибки и указать проверки работоспособности.
    Например, см. следующие два указателя:

Наконец, обратите внимание, что использование docker swarm может быть еще одним альтернативным решением, которое не менее «стандартно», чем docker-compose, и которое дополнительно имеет функцию кластеризации — для превращения группы механизмов Docker в один виртуальный механизм Docker (источник).

Два связанных указателя:

person ErikMD    schedule 24.09.2018