Ответ 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 │
└───────────────┴─────────────┘