Возможно ли запустить несколько докеров-демонами на одном компьютере

И если это возможно, как бы вы настроили местоположение каждого демона - графика, местоположение изображения и т.д.?

Ответы

Ответ 1

Да, вполне возможно запустить два демона Docker на одном хосте даже без Docker Machine. Начиная с Docker 18.09.0-ce, следующие флаги dockerd могут вызывать конфликты, если два демона использовали значения по умолчанию:

  -b, --bridge string       Attach containers to a network bridge
      --exec-root string    Root directory for execution state files (default "/var/run/docker")
      --data-root string    Root directory of persistent Docker state (default "/var/lib/docker")
  -H, --host list           Daemon socket(s) to connect to
  -p, --pidfile string      Path to use for daemon PID file (default "/var/run/docker.pid")
  • По умолчанию для --bridge является docker0, и если вы не используете значение по умолчанию, вы должны создать и настроить мост вручную (Docker не будет создавать/управлять им для вас). Более подробная информация ниже.

  • --exec-root - это место, где хранится состояние контейнера (по умолчанию: /var/run/docker).

  • --data-root - это место, где хранятся изображения (по умолчанию: /var/lib/docker).

  • --host указывает, где демон Docker будет прослушивать клиентские соединения. Если не указано, по умолчанию используется /var/run/docker.sock.

  • --pidfile - это место, где хранится идентификатор процесса демона (по умолчанию: /var/run/docker.pid).

Таким образом, если ваши два демона используют разные значения для этих флагов, вы можете запускать их на одном хосте. Пример сценария (включая настройку сети):

#!/bin/sh
## name: altdocker.sh
set -e -x

: ${bridge=altdocker}
: ${base=$HOME/$bridge}

# Set up bridge network:
if ! ip link show $bridge > /dev/null 2>&1
then
   sudo brctl addbr $bridge
   sudo ip addr add ${net:-"10.20.30.1/24"} dev $bridge
   sudo ip link set dev $bridge up
fi

sudo dockerd \
  --bridge=$bridge \
  --data-root=$base.data \
  --exec-root=$base.exec \
  --host=unix://$base.socket \
  --pidfile=$base.pid

Пример использования:

## in one terminal
$ env net=10.9.8.7/24 /bin/sh altdocker.sh
# ... log output ...

## in another terminal
$ docker -H unix://$HOME/altdocker.socket run --rm -i -t alpine sh
/ # echo hereiam
hereiam

Обновлен для изменений с Docker 1.9.1 до 18.09.0-ce, если кто-то использует очень старую версию:

┌───────────────┬─────────────┐
│ 1.9.1         │ 18.09.0-ce  │
├───────────────┼─────────────┤
│ docker daemon │ dockerd     │
│ -g / --graph  │ --exec-root │
└───────────────┴─────────────┘

Ответ 2

Отличный вопрос! Внутри контейнера можно запустить демон Docker. В этом контейнере вы сможете запустить больше контейнеров. Таким образом, вы можете запускать докеры-демоны с разными настройками на одной и той же машине.

Оформить заказ этого проекта: https://github.com/jpetazzo/dind. Он обеспечивает изображение Docker, которое содержит сам Docker, как вам нужно.

Ответ 3

Да, это можно сделать, используя Docker Machine

Используя это, вы можете создать несколько демонов докеров и переключиться между ними, как хотите.