Is it possible to start multiple docker daemons on the same machine

后端 未结 3 1992
走了就别回头了
走了就别回头了 2020-12-23 11:56

And if it is possible, how would you configure each daemon - graph location, images location, etc?

相关标签:
3条回答
  • 2020-12-23 12:36

    Great question! It is possible to start a Docker daemon inside a container. In that container you would be able to start more containers. This way you can run docker daemons with different settings on the same host machine.

    Checkout this project: https://github.com/jpetazzo/dind. It provides a Docker image that contains Docker itself, just as you require.

    0 讨论(0)
  • 2020-12-23 12:43

    Yes, this is doable by using Docker Machine

    Using this you can create multiple docker daemons and switch between them as you want.

    0 讨论(0)
  • 2020-12-23 12:57

    Yes, it's perfectly possible to run two Docker daemons on a single host even without Docker Machine. As of Docker 18.09.0-ce, the following dockerd flags are the ones that could cause conflicts if two daemons used the defaults:

      -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")
    
    • The default for --bridge is docker0, and if you're not using the default, you must create and configure the bridge manually (Docker won't create/manage it for you). More details below.

    • --exec-root is where container state is stored (default: /var/run/docker).

    • --data-root is where images are stored (default: /var/lib/docker).

    • --host specifies where the Docker daemon will listen for client connections. If unspecified, it defaults to /var/run/docker.sock.

    • --pidfile is where the process ID of the daemon is stored (default: /var/run/docker.pid).

    So, as long as your two daemons use different values for these flags, you can run them on the same host. Example script (including network setup):

    #!/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
    

    Example usage:

    ## 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
    

    Updated for changes from Docker 1.9.1 to 18.09.0-ce, in case anyone is using a very old version:

    ┌───────────────┬─────────────┐
    │ 1.9.1         │ 18.09.0-ce  │
    ├───────────────┼─────────────┤
    │ docker daemon │ dockerd     │
    │ -g / --graph  │ --exec-root │
    └───────────────┴─────────────┘
    
    0 讨论(0)
提交回复
热议问题