如果可能,您将如何配置每个守护程序-图形位置,图像位置等?
是的,即使没有Docker Machine,也可以在单个主机上运行两个Docker守护进程。从Docker 18.09.0-ce开始,dockerd如果两个守护程序使用默认值,则以下标志可能会导致冲突:
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不会为您创建/管理它)。下面有更多详细信息。
--bridge
docker0
--exec-root是存储容器状态的位置(默认值:)/var/run/docker。
--exec-root
/var/run/docker
--data-root是存储图像的位置(默认值:)/var/lib/docker。
--data-root
/var/lib/docker
--host指定Docker守护程序将在何处侦听客户端连接。如果未指定,则默认为/var/run/docker.sock。
--host
/var/run/docker.sock
--pidfile是守护程序的进程ID的存储位置(默认值:)/var/run/docker.pid。
--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 ip link add name $bridge type 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 │ └───────────────┴─────────────┘