2014-07-21 25 views
6

Là một phần của chiến lược triển khai của tôi, tôi đang quản lý vùng chứa Docker với Upstart.Tạo vùng chứa Docker từ hình ảnh mà không bắt đầu nó

Để làm điều đó, tôi cần phải kéo một hình ảnh từ một đăng ký và tạo một container đặt tên (như đề xuất trên Upstart script to run container won't manage lifecycle)

Có cách nào để tạo container mà không cần đầu tiên chạy hình ảnh? Tôi không muốn phải bắt đầu một container (mà có thể giới thiệu tác dụng phụ), ngăn chặn nó, và sau đó quản lý ở nơi khác.

Ví dụ, một cái gì đó như:

docker.io create -e ENV1=a -e ENV2=b -p 80:80 --name my_first_container sample/containe 

Trả lời

3

Bạn có thể đạt được điều đó bằng cách sử dụng Docker Remote API.

Trước hết hãy điều chỉnh cách trình nền của trình chạy docker đang chạy. Cấu hình nó để lắng nghe các yêu cầu HTTP trên cổng 4243 ngoài việc mặc định unix socket:

sudo sh -c "echo 'DOCKER_OPTS=\"-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock\"' > /etc/default/docker" 

Bây giờ, bạn có thể sử dụng /containers/create endpoint để tạo ra một container mà không cần chạy nó: sự chú ý

curl -X POST -H "Content-Type: application/json" http://localhost:4243/containers/create?name=my_first_container -d ' 
{ 
    "Name": "dtest2", 
    "AttachStdin": "false", 
    "AttachStdout": "false", 
    "AttachStderr": "false", 
    "Tty": "false", 
    "OpenStdin": "false", 
    "StdinOnce": "false", 
    "Cmd":["/bin/bash", "-c", "echo Starting;sleep 20;echo Stopping"], 
    "Image": "ubuntu", 
    "DisableNetwork": "false" 
} 
' 

Pay với thông số ?name=my_first_container tôi đã thêm vào url yêu cầu curl. Đây là cách bạn đặt tên cho vùng chứa của mình.

Ghi chú bên - Điều tương tự cũng có thể đạt được mà không cần thêm giao diện HTTP, tuy nhiên có vẻ dễ dàng hơn khi hiển thị giải pháp bằng cách sử dụng yêu cầu POST curl đơn giản.

+0

Tôi không muốn thêm giao diện http để có thể đọc được trên toàn thế giới (hoặc thậm chí bởi localhost, vì lý do cộng đồng Docker đã thảo luận) có lệnh tương đương với socket unix không? –

+0

@MarshallAnschutz có [cách bảo mật] (http://blog.james-carr.org/2013/10/30/securing-dockers-remote-api/) Giao diện http của Docker. Nếu bạn muốn tương tác trực tiếp với socket unix, bạn có thể gửi yêu cầu HTTP bằng cách chạy 'echo -e" POST/containers/create? Name = dtest8 HTTP/1.1 ....... "| nc -U/var/run/docker.sock' –

+0

Tôi đang nghiêng về phía giao diện python để làm cho công việc này đúng cách. Đó dường như là cách quản lý tốt nhất –

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