- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Docker Remote API 사용하기
이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20
기타 예제 및 함수
attach 함수: 컨테이너에 연결합니다.
- container: 연결할 컨테이너의 객체 또는 이름입니다.
- stdout: 표준 출력(stdout)을 연결합니다.
- stderr: 표준 에러(stderr)를 연결합니다.
- stream: 결과 값을 받을 때 HTTP 1.1 Chunked transfer encoding을 사용합니다.
- logs: 로그를 출력합니다.
c.attach(container, stdout=True, stderr=True, stream=False, logs=False)
Python으로 입출력을 구현하려면 dockerpty를 사용하면 됩니다.
~$ git clone https://github.com/d11wtq/dockerpty.git
~$ cd dockerpty
~/dockerpty$ sudo python setup.py install
다음은 dockerpty를 사용하여 터미널에서 입출력을 하는 예제입니다.
import docker
import dockerpty
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='ubuntu:14.04',
stdin_open=True,
tty=True,
command='/bin/bash'
)
dockerpty.start(c, container_id)
commit 함수: 컨테이너를 이미지로 저장합니다.
- container: 커밋 기능을 사용할 컨테이너의 객체 또는 이름입니다.
- repository: 생성할 이미지 이름이며 '<Docker Hub 사용자 계정>/<이미지 이름>' 또는 '<이미지 이름>' 형식입니다.
- tag: 생성할 이미지의 태그입니다.
- message: 커밋 로그 메시지입니다.
- author: 이미지를 생성한 사람의 정보입니다. 예) 'Hong, Gildong <gd@yuldo.com>'
- conf: 이미지를 생성할 때 필요한 설정 값입니다.
c.commit(container, repository=None, tag=None, message=None, author=None,
conf=None)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.pull(repository='nginx', tag='latest')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.commit(
container_id,
repository='hello',
tag='0.1',
message='example message',
author='Hong, Gildong <gd@yuldo.com>',
conf={
'Hostname':'',
'User':'',
'Memory':0,
'MemorySwap':0,
'AttachStdin':False,
'AttachStdout':False,
'AttachStderr':True,
'PortSpecs':None,
'Tty':False,
'OpenStdin':False,
'StdinOnce':False,
'Env':None,
'Cmd':[
'/bin/bash'
],
'Volumes':{
'/data':{}
},
'WorkingDir':'',
'DisableNetwork':False,
'ExposedPorts':{
'80/tcp':{}
}
}
)
copy 함수: 컨테이너에서 파일을 가져옵니다.
- container: 파일을 가져올 컨테이너의 객체 또는 이름입니다.
- resource: 컨테이너 안의 파일 경로입니다.
- 리턴값은 urllib3.response.HTTPResponse이며 .data에 tar 형식으로 데이터가 저장되어 있습니다.
c.copy(container, resource)
import docker
import tarfile
import io
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.start(container_id)
response = c.copy(container_id, '/etc/nginx.conf')
t = tarfile.open(fileobj=io.BytesIO(response.data))
t.extractall();
diff 함수: 이미지와 컨테이너 간의 바뀐 부분을 출력합니다.
- container: 비교할 컨테이너의 객체 또는 이름입니다.
c.diff(container)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.start(container_id)
print c.diff(container_id)
export
함수: 컨테이너를 tar 파일로 저장합니다.
- container: tar 파일로 저장할 컨테이너의 객체 또는 이름입니다.
c.export(container)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.start(container_id)
response = c.export(container_id)
with open('./nginx.tar', 'wb') as f:
f.write(response.data)
history 함수: 이미지의 히스토리를 출력합니다.
- image: 히스토리를 출력할 이미지 이름이며 '<이미지 이름>:<태그>' 또는 '<이미지 이름>' 입니다.
c.history(image)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
print c.history('nginx:latest')
import_image 함수: tar 파일을 사용하여 이미지를 생성합니다.
- src: tar 파일의 경로입니다.
- repository: 생성할 이미지 이름이며 '<Docker Hub 사용자 계정>/<이미지 이름>' 또는 '<이미지 이름> 형식입니다.
- tag: 생성할 이미지의 태그입니다.
- image: 기존에 있는 이미지를 가져옵니다. 예) 'nginx:latest'
c.import_image(src=None, repository=None, tag=None, image=None)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.import_image(src='./nginx.tar', repository='hello', tag='0.1')
info 함수: 현재 Docker의 컨테이너, 이미지 개수, Execution Driver, Storage Driver, 커널 버전 등의 정보를 출력합니다.
c.info()
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
print c.info()
inspect_container 함수: 컨테이너의 세부 정보를 출력합니다.
- container: 세부 정보를 출력할 컨테이너의 객체 또는 이름입니다.
c.inspect_container(container)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.start(container_id)
print c.inspect_container(container_id)
inspect_image 함수: 이미지의 세부 정보를 출력합니다.
- 세부 정보를 출력할 이미지 ID입니다.
c.inspect_image(image_id)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
print c.inspect_image('nginx:latest')
kill 함수: 컨테이너를 강제 종료합니다.
- container: 종료할 컨테이너의 객체 또는 이름입니다.
- signal: 컨테이너에 특정 시그널을 보냅니다. 예) 'KILL'
c.kill(container, signal=None)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.start(container_id)
c.kill(container_id)
login 함수: Docker Hub에 로그인합니다.
- username: Docker Hub 계정입니다.
- password: Docker Hub 계정의 비밀번호입니다.
- email: Docker Hub에 가입할 때 사용한 이메일 주소입니다.
- registry: 레지스트리 서버 주소입니다. 기본 값은 Docker Hub입니다.
c.login(username, password=None, email=None, registry=None)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.login(username='exampleuser',
password='examplepassword',
email='exampleuser@example.com')
logs 함수: 컨테이너의 표준 출력, 표준 에러를 출력합니다.
- container: 로그를 출력할 컨테이너의 객체 또는 이름입니다.
- stdout: 표준 출력을 출력합니다.
- stderr: 표준 에러를 출력합니다.
- stream: 결과 값을 받을 때 HTTP 1.1 Chunked transfer encoding을 사용합니다.
- timestamps: 시간값을 출력합니다.
c.logs(container, stdout=True, stderr=True, stream=False, timestamps=False)
import docker
import time
c = docker.Client(base_url='unix://var/run/docker.sock')
c.pull('ubuntu', tag='14.04')
container_id = c.create_container(
image='ubuntu:14.04',
command='/bin/bash -c "while sleep 1; do echo 1; done"',
)
c.start(container_id)
time.sleep(5)
print c.logs(container_id)
port 함수: 컨테이너에서 호스트에 연결되고 외부에 노출된 포트를 조회합니다.
- container: 조회할 컨테이너의 객체 또는 이름입니다.
- private_port: 조회할 포트 번호입니다. 예) 80
c.port(container, private_port)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.start(
container_id,
port_bindings={80: ('0.0.0.0', 80)}
)
print c.port(container_id, 80)
push 함수: 이미지를 저장소에 올립니다.
- repository: 이미지 이름이며 '<Docker Hub 사용자 계정>/<이미지 이름>' 형식입니다.
- tag: 이미지의 태그입니다.
- stream: 결과 값을 받을 때 HTTP 1.1 Chunked transfer encoding을 사용합니다.
c.push(repository, tag=None, stream=False)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
#c.push(repository='localhost:5000/hello', tag='0.1') # 개인 저장소
c.login(username='exampleuser',
password='examplepassword',
email='exampleuser@example.com')
c.push(repository='exampleuser/hello', tag='0.1') # Docker Hub
remove_container 함수: 컨테이너를 삭제합니다.
- container: 삭제할 컨테이너의 객체 또는 이름입니다.
- v: 컨테이너와 연결된 데이터 볼륨을 함께 삭제합니다.
- link:
docker run
명령의--link
옵션으로 컨테이너를 연결했을 때 연결 상태만 삭제합니다. 예) 'web/db'
c.remove_container(container, v=False, link=False)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.remove_container('hello-nginx')
remove_image 함수: 이미지를 삭제합니다.
- image: 삭제할 이미지 이름입니다. 예) 'nginx:latest'
c.remove_image(image)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.remove_image('nginx:latest')
restart 함수: 컨테이너를 재시작합니다.
- container: 재시작할 컨테이너의 객체 또는 이름입니다.
- timeout: 컨테이너가 종료될 때까지 지정한 시간 동안 대기합니다. 초 단위입니다.
c.restart(container, timeout=10)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.restart('hello-nginx')
search 함수: Docker Hub에서 이미지를 검색합니다.
- term: 검색할 단어입니다.
c.search(term)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
print c.search('nginx')
stop 함수: 컨테이너를 정지합니다.
- container: 정지할 컨테이너의 객체 또는 이름입니다.
- timeout: 컨테이너가 종료될 때까지 지정한 시간 동안 대기합니다. 초 단위입니다.
c.stop(container, timeout=10)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.stop('hello-nginx')
tag 함수: 이미지에 태그를 설정합니다.
- image: 이미지 이름입니다. 예) 'hello:0.1'
- repository: 레지스트리 서버 주소와 이미지 이름입니다. 예) '192.168.0.10:5000/hello'
- tag: 생성할 이미지의 태그입니다.
- force: 강제로 태그를 설정합니다.
c.tag(image, repository, tag=None, force=False)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
#c.tag('hello:0.1', 'localhost:5000/hello', '0.1') # 개인 저장소
c.tag('hello:0.1', 'exampleuser/hello', '0.1') # Docker Hub
top 함수: 컨테이너에서 현재 실행되고 있는 프로세스 목록을 출력합니다.
- container: 프로세스 목록을 출력할 컨테이너의 객체 또는 이름입니다.
c.top(container)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
print c.top('hello-nginx')
version 함수: Docker 버전 정보를 출력합니다.
c.version()
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
print c.version()
wait 함수: 컨테이너가 정지될 때까지 대기합니다. 컨테이너가 정지되면 Exit Code를 출력합니다.
- container: 대기할 컨테이너의 객체 또는 이름입니다.
c.wait(container)
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
container_id = c.create_container(
image='nginx:latest',
ports=[80],
volumes=['/data']
)
c.start(container_id)
print c.wait(container_id)
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.