2014-07-21 40 views
6

Dağıtım stratejimin bir parçası olarak, Docker kapsayıcılarını Upstart ile yönetiyorum. Docker kabını görüntüden başlatmadan oluşturun

Bunu yapmak için, ben

ilk görüntüyü çalıştırmadan kapsayıcı oluşturmak için bir yolu var mı bir kayıt defterinden bir görüntü çekin ve (Upstart script to run container won't manage lifecycle üzerine önerilen) adlandırılmış bir kapsayıcı oluşturmak gerekir? Bir konteyner (yan etkilere neden olabilir) başlatmak, durdurmak ve başka bir yerde yönetmek zorunda kalmak istemiyorum. gibi

Örneğin

şey:

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

cevap

3

Bunu elde edebilirsiniz Docker Remote API kullanarak.

Her şeyden önce docker arka planının nasıl çalıştığını ayarlayın.

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" 
} 
' 

dikkat edin: Eğer akmayan bir kapsayıcı oluşturmak için /containers/create bitiş noktası kullanabilirsiniz, Şimdi

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

: varsayılan unix sokete ek olarak port 4243 tarihinde HTTP istekleri dinlemek için yapılandırma Curl talebi URL'sine eklediğim ?name=my_first_container parametresine. Konteynerin adını böyle yaz.

Yan not - Aynı şey HTTP arabirimi eklenmeden gerçekleştirilebilir, ancak çözümün basit bir kıvrılma POST isteğini kullanarak daha kolay gösterilmesi daha kolay görünüyor.

+0

Dünya çapında okunabilir olmak için http arayüzünü (veya Docker topluluğunun halihazırda görüştüğü nedenlerden dolayı localhost) eklememeyi tercih ediyorum unix soketiyle eşdeğer bir komut var mı? –

+0

@MarshallAnschutz [güvenli yol] vardır (http://blog.james-carr.org/2013/10/30/securing-dockers-remote-api/) Docker'in http arayüzü. Unix soketiyle doğrudan etkileşimde bulunmak istiyorsanız, “echo -e“ POST/container/create? Name = dtest8 HTTP/1.1 ....... çalıştırarak HTTP isteğini gönderebilirsiniz. ”| nc -U/var/run/docker.sock' –

+0

Bu işi düzgün yapmak için python arabirimine yaslanıyorum. Bu, bunu yönetmenin en akılcı yolu gibi görünüyor. –