2015-09-01 17 views

risposta

25

Sì, è perfettamente possibile eseguire due daemon Docker su un singolo host anche senza Docker Machine. Come di Docker 1.9.1, i seguenti docker daemon bandiere sono quelle che potrebbero causare conflitti se due demoni utilizzati i valori predefiniti:

-b, --bridge=      Attach containers to a network bridge 
    --exec-root=/var/run/docker   Root of the Docker execdriver 
    -g, --graph=/var/lib/docker   Root of the Docker runtime 
    -H, --host=[]      Daemon socket(s) to connect to 
    -p, --pidfile=/var/run/docker.pid Path to use for daemon PID file 
  • L'impostazione predefinita per --bridge è docker0, e se non si sta utilizzando la per impostazione predefinita, è necessario creare e configurare il bridge manualmente (Docker non lo creerà/gestirà per te). Maggiori dettagli di seguito.

  • --exec-root=/var/run/docker è lo stato del contenitore in cui è memorizzato.

  • --graph=/var/lib/docker è dove sono memorizzate le immagini.

  • --host=[] specifica dove il daemon Docker ascolterà le connessioni client. Se non specificato, il valore predefinito è /var/run/docker.sock.

  • --pidfile=/var/run/docker.pid è dove viene memorizzato l'ID di processo del daemon.

Quindi, fintanto che i tuoi due daemon utilizzano valori diversi per questi flag, puoi eseguirli sullo stesso host. Esempio di script (compresa l'impostazione della rete):

#!/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 docker daemon \ 
    --bridge=$bridge \ 
    --exec-root=$base.exec \ 
    --graph=$base.graph \ 
    --host=unix://$base.socket \ 
    --pidfile=$base.pid 

Esempio utilizzo:

## 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 -it alpine sh 
/# echo hereiam 
hereiam 
+2

Funziona davvero alla grande. Tuttavia il tuo comando per testare l'installazione non può funzionare come tu lo metti. 'finestra mobile -H unix: // $ HOME/altdocker --rm -it alpine sh' dovrebbe essere' docker -H unix: //$HOME/altdocker.socket eseguire --rm -it alpine sh'. –

+0

Grazie a @dynamic_cast. Estratto da uno script più grande. Corretto l'esempio – benizi

6

Ottima domanda! È possibile avviare un daemon Docker all'interno di un contenitore. In quel contenitore saresti in grado di avviare più contenitori. In questo modo è possibile eseguire i daemon docker con impostazioni diverse sullo stesso computer host.

Verifica questo progetto: https://github.com/jpetazzo/dind. Fornisce un'immagine Docker che contiene Docker stessa, proprio come richiesto.

-1

Sì, questo è fattibile utilizzando Docker Machine

Usando questo è possibile creare più demoni docker e passare da uno all'altro come si desidera.

+1

Esattamente come si va a fare questo? Dovrai creare una VM per ogni motore di finestra mobile che vuoi, giusto? – babbata

Problemi correlati