2015-09-01 1 views

ответ

25

Да, вполне возможно запустить двух демонов Docker на одном хосте, даже без Docker Machine. По Докер 1.9.1, следующие docker daemon флаги являются те, которые могут привести к конфликтам, если два демона используется по умолчанию:

-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 
  • по умолчанию для --bridge является docker0, и если вы не используете default, вы должны создать и настроить мост вручную (Docker не будет создавать/управлять им для вас). Подробнее см. Ниже.

  • --exec-root=/var/run/docker где хранится состояние контейнера.

  • --graph=/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 docker daemon \ 
    --bridge=$bridge \ 
    --exec-root=$base.exec \ 
    --graph=$base.graph \ 
    --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 -it alpine sh 
/# echo hereiam 
hereiam 
+2

Это работает отлично. Однако ваша команда для тестирования установки не может работать так, как вы ее положили. 'docker -H unix: // $ HOME/altdocker --rm -it alpine sh' должен быть' docker -H unix: //$HOME/altdocker.socket run --rm -it alpine sh'. –

+0

Спасибо @dynamic_cast. Извлечен из большого скрипта. Исправлен пример. – benizi

6

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

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

-1

Да, это выполнимо с помощью Docker Machine

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

+1

Как именно вы бы идти об этом? Вам нужно будет создать виртуальную машину для каждого требуемого движка докеры, верно? – babbata