저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Docker Remote API 사용하기
이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20
이미지 생성하기
다음 내용을 docker-run.py로 저장합니다. nginx 이미지를 받고 컨테이너로 실행하는 예제입니다.
docker-build.py
import docker
import io
script = io.StringIO(u'\n'.join([
'FROM ubuntu:14.04',
'MAINTAINER Foo Bar <foo@bar.com>',
'RUN apt-get update',
'RUN apt-get install -y nginx',
'RUN echo "\\ndaemon off;" >> /etc/nginx/nginx.conf',
'RUN chown -R www-data:www-data /var/lib/nginx',
'VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]',
'WORKDIR /etc/nginx',
'CMD ["nginx"]',
'EXPOSE 80',
'EXPOSE 443'
]))
c = docker.Client(base_url='unix://var/run/docker.sock')
c.build(tag='hello:0.1', quiet=True, fileobj=script, rm=True)
- io.StringIO 함수를 사용하여 Dockerfile의 내용을 생성합니다.
- docker.Client 클래스를 생성합니다. base_url에는 Docker 데몬의 유닉스 소켓 경로를 설정합니다.
- docker.Client 클래스로 생성한 인스턴스 c로 build 함수를 실행합니다. 이미지 이름과 태그를 설정합니다. 이미지를 생성하면서 출력되는 결과를 표시하지 않도록 quiet=True로 설정하고, 이미지 생성을 완료했을 때 임시 이미지를 삭제하도록 rm=True로 설정합니다. fileobj에는 앞에서 생성한 script를 설정합니다.
이제 docker-build.py 파일을 실행합니다.
$ sudo python docker-build.py
이미지 목록을 출력하면 Python 라이브러리로 생성한 이미지가 표시됩니다.
$ sudo docker ps
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello 0.1 8da15999194f About an hour ago 263.8 MB
ubuntu 14.04 c4ff7513909d 2 weeks ago 225.4 MB
build 함수: 이미지를 생성합니다.
- path: Dockerfile의 경로입니다. 디렉터리 경로뿐만 아니라 http://, https://, git://을 사용할 수 있습니다.
- tag: 이미지 이름 및 태그입니다.
- quiet: 이미지를 생성하면서 출력되는 결과를 표시하지 않습니다.
- fileobj: Docker 파일을 객체 형식으로 설정합니다. fileobj를 설정하면 path는 무시됩니다.
- nocache: 빌드 결과를 캐시하지 않습니다.
- rm: 이미지 생성을 완료했을 때 임시 이미지를 삭제합니다.
- stream: 결과 값을 받을 때 HTTP 1.1 Chunked transfer encoding을 사용합니다.
- timeout: 접속 대기 시간이며 초 단위입니다.
- custom_context: tar, tar.gz 등의 파일을 읽어서 사용할 때 True로 설정합니다. 파일 내용은 fileobj에 설정해야 합니다.
- encoding: custom_context가 압축이 되어 있으면 압축 형식을 지정합니다. 예) 'gzip'
c.build(path=None, tag=None, quiet=False, fileobj=None, nocache=False,
rm=False, stream=False, timeout=None,
custom_context=False, encoding=None)
다음은 현재 디렉터리에 Dockerfile이 있을 때 이미지를 생성하는 예제입니다.
docker-build-local.py
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.build(path='.', tag='hello:0.1', quiet=True, rm=True)
다음은 Dockerfile 및 필요한 파일을 hello.tar.gz로 압축했을 때 이미지를 생성하는 예제입니다.
docker-build-gzip.py
import docker
script = open('./hello.tar.gz', 'r')
c = docker.Client(base_url='unix://var/run/docker.sock')
c.build(tag='hello:0.1', quiet=True, fileobj=script,
rm=True, custom_context=True, encoding='gzip')
다음은 GitHub 또는 웹에서 Dockerfile을 받아서 이미지를 생성하는 예제입니다. 단 http://로 파일을 받을 때는 tar, tar.gz 파일은 사용할 수 없습니다.
docker-build-remote.py
import docker
c = docker.Client(base_url='unix://var/run/docker.sock')
c.build(
path='github.com/pyrasis/dind.git', # GitHub
#path='http://example.com/Dockerfile', # http
tag='hello:0.1', quiet=True, rm=True
)
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.