2015-09-01 16 views

Trả lời

25

Có, hoàn toàn có thể chạy hai trình tiện ích Docker trên một máy chủ lưu trữ ngay cả khi không có Máy Docker. Tính đến Docker 1.9.1, các docker daemon cờ sau đây là những người mà có thể gây ra xung đột nếu hai daemon sử dụng giá trị mặc định:

-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 
  • Giá trị mặc định cho --bridgedocker0, và nếu bạn không sử dụng các mặc định, bạn phải tạo và cấu hình cầu thủ công (Docker sẽ không tạo/quản lý nó cho bạn). Thêm chi tiết bên dưới.

  • --exec-root=/var/run/docker là nơi lưu trữ trạng thái vùng chứa.

  • --graph=/var/lib/docker là nơi lưu trữ hình ảnh.

  • --host=[] chỉ định nơi trình nền Docker sẽ lắng nghe kết nối máy khách. Nếu không được chỉ định, giá trị mặc định là /var/run/docker.sock.

  • --pidfile=/var/run/docker.pid là nơi ID quy trình của daemon được lưu trữ.

Vì vậy, miễn là hai daemon của bạn sử dụng các giá trị khác nhau cho những lá cờ, bạn có thể chạy chúng trên cùng một máy chủ. đoạn mã ví dụ (bao gồm cả thiết lập mạng):

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

dụ sử dụng:

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

Điều này hoạt động thực sự tuyệt vời. Tuy nhiên lệnh của bạn để kiểm tra thiết lập không thể làm việc theo cách bạn đặt nó. 'docker -H unix: // $ HOME/altdocker --rm -it alpine sh' phải là' docker -H unix: //$HOME/altdocker.socket run --rm -it alpine sh'. –

+0

Cảm ơn @dynamic_cast. Trích xuất này từ một kịch bản lớn hơn. Sửa ví dụ. – benizi

6

Câu hỏi hay! Có thể khởi động trình nền Docker bên trong một thùng chứa. Trong hộp chứa đó, bạn sẽ có thể bắt đầu nhiều vùng chứa hơn. Bằng cách này, bạn có thể chạy các trình tiện ích docker với các cài đặt khác nhau trên cùng một máy chủ.

Thanh toán dự án này: https://github.com/jpetazzo/dind. Nó cung cấp một hình ảnh Docker có chứa Docker chính nó, cũng giống như bạn yêu cầu.

-1

Vâng, đây là doable bằng cách sử dụng Docker Machine

Sử dụng này, bạn có thể tạo nhiều daemon Docker và chuyển đổi giữa chúng như bạn muốn.

+1

Làm thế nào chính xác bạn sẽ đi về việc này? Bạn sẽ phải tạo một VM cho mỗi công cụ docker mà bạn muốn, đúng không? – babbata

Các vấn đề liên quan