2014-07-21 5 views
6

배포 전략의 일환으로 Upstart를 사용하여 Docker 컨테이너를 관리하고 있습니다. 이미지를 시작하지 않고 이미지에서 도커 컨테이너 만들기

는이를 위해, 나는

먼저 이미지를 실행하지 않고 컨테이너를 만들 수있는 방법이 있나요 레지스트리에서 이미지를 끌어와 (Upstart script to run container won't manage lifecycle에 제안) 명명 된 컨테이너를 생성해야합니까? 나는 컨테이너를 시작해야만 (부작용이 생길 수 있음), 중지하고, 다른 곳에서 관리하고 싶지 않습니다. 같은

예를 들어

, 뭔가 :

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

답변

3

당신이 달성 할 수 Docker Remote API를 사용하여.

우선 docker 데몬이 실행되는 방식을 조정하십시오.

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

에주의를 : 당신이 그것을 실행하지 않고 컨테이너를 만들 수 /containers/create 엔드 포인트를 사용할 수 있습니다, 지금

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

: 그것은 기본 유닉스 소켓에 추가하여 포트 4243에서 HTTP 요청을 청취하기 위해 구성 curl request url에 추가 된 ?name=my_first_container 매개 변수에 추가합니다. 이것이 컨테이너의 이름입니다.

사이드 노트 - HTTP 인터페이스를 추가하지 않고도 동일하게 수행 할 수 있지만 간단한 컬 POST 요청을 사용하여 솔루션을 표시하는 것이 더 쉬워 보입니다.

+0

http 인터페이스를 독서실 (또는 Docker 커뮤니티에서 이미 논의한 이유 때문에 localhost도 포함)로 추가하지 않고 UNIX 소켓과 동일한 명령이 있습니까? –

+0

@MarshallAnschutz에는 [보안 방법] (http://blog.james-carr.org/2013/10/30/securing-dockers-remote-api/) Docker의 http 인터페이스가 있습니다. 유닉스 소켓과 직접 대화하고자한다면'echo -e "를 실행하여 HTTP 요청을 보낼 수있다. POST/containers/create? name = dtest8 HTTP/1.1 ......."| nc -U/var/run/docker.sock' –

+0

이 작업을 제대로 수행하기 위해 파이썬 인터페이스에 기대고 있습니다. 그것은 이것을 관리하는 가장 제정신 인 방법 인 것처럼 보입니다. –

관련 문제