-
Dockerfile 구조Cloud 2015. 1. 28. 09:00Dockerfile 이라는 파일에 docker에서 필요한 설정들을 해서 컨테이너를 원하는대로 설정할 수 있다.Dockerfile을 생성한 후 아래처럼 소스경로를 포함해서 빌드명령을 내리면 해당 경로를 기준으로 빌드가 실행된다.docker build /your/source/path빌드에서 제외할 파일들은 .dockerignore 파일에 명시해서 제외할 수 있다.Dockfile안의 명령어들은 독립적으로 실행되어서 다음에 실행되는 명령에 영향을 미치지 않는다.Dockfile 구조#을 이용해서 주석처리"명령어 인자”의 형식명령어는 대소문자를 구분하지는 않으나 가급적 대문자를 이용하는것이 보기 좋음.각 명령어는 위에서부터 순서대로 실행됨첫번째 명령어는 반드시 ‘FROM'이어야 함.ENV 명령어로 환경변수를 선언해서 사용할 수 있음.사용할때는 ‘$변수명’, ‘${변수명}’ 형식으로 사용함.예제FROM busyboxENV foo /barWORKDIR ${foo} # WORKDIR /barADD . $foo # ADD . /barCOPY \$foo /quux # COPY $foo /quux환경변수를 이용가능한 명령어들ENV, ADD, COPY, WORKDIR, EXPOSE, VOLUME, USER명령어 설명FROM <image>FROM <image>:<tag>Dockerfile에서 사용되는 기본 이미지를 설정함.항상 Dockerfile의 가장 처음에 와야함.tag가 없으면 기본으로 latest를 이용함.MAINTAINER <name>이미지를 만든 사람을 명시함.RUN <command>RUN [“executable”, “param1”, “param2”]현재 이미지의 최상단 레이어에서 명령어(command)를 실행하고 결과를 커밋(commit)함.커밋된 이미지는 Dockerfile의 다음 단계에 이용됨.CMD ["executable","param1","param2"]CMD ["param1","param2"]CMD command param1 param2컨테이너에서 실행할 명령어.하나의 Dockerfile에서 한번만 사용할 수 있는 명령이고, 여러개가 있을 경우에는 가장 마지막에 있는 CMD만 실행됨.EXPOSE <port> [<port>...]컨테이너가 실행중에 열리는 포트를 명시ENV <key> <value>ENV <key>=<value>환경부 <key>에 값인 <value>를 할당.ADD <src>... <dest><src>에 있는 파일, 디렉토리, 원격 URL를 <dest>에 명시된 컨테이너의 파일시스템으로 복사한다.<src>는 docker build 에서 명시한 경로의 하위여야 함.<dest>는 절대경로여야 함.COPY <src>... <dest><src>에 있는 파일이나 디렉토리를 컨테이너의 <dest> 경로에 복사한다.<src>는 docker build 에서 명시한 경로의 하위여야 함.<dest>는 절대경로여야 함.ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2ENTRYPOINT를 이용해서 컨테이너를 실행가능한 형태로 만들수 있다.VOLUME ["/data"]지정된 이름으로 마운트 지점을 생성한다.USER daemon이미지를 실행할때 사용할 사용자명이나 UID를 지정한다.WORKDIR /path/to/workdirRUN, CMD, ENTRYPOINT 명령어가 실행되는 작업 디렉토리를 설정한다.ONBUILD [INSTRUCTION]현재 이미지가 나중에 다른 빌드의 기본 이미지로 사용될때, 그때 이 이미지에 실행될 트리거 명령을 추가한다.Dockerfile 예제# Nginx## VERSION 0.0.1FROM ubuntuMAINTAINER Victor Vieux <victor@docker.com>RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server# Firefox over VNC## VERSION 0.3FROM ubuntu# ‘fake’ 디스플레이와 파이어폭스를 만들기위해 vnc, xvfb 설치RUN apt-get update && apt-get install -y x11vnc xvfb firefoxRUN mkdir ~/.vnc# 패스워드 설정RUN x11vnc -storepasswd 1234 ~/.vnc/passwd# 파이어폭스 자동시작RUN bash -c 'echo "firefox" >> /.bashrc'EXPOSE 5900CMD ["x11vnc", "-forever", "-usepw", "-create"]# 다중 이미지 예제## VERSION 0.1FROM ubuntuRUN echo foo > bar# 출력은 다음과 같다. ===> 907ad6c2736fFROM ubuntuRUN echo moo > oink# 출력은 다음과 같다.===> 695d7793cbe4# /bar를 가진 907ad6c2736f, /olink를 가진 695d7793cbe4 2개의 이미지가 생성됨.참고
'Cloud' 카테고리의 다른 글
trove 개념 잡기 (0) 2015.02.25 openstack 개념잡기 (0) 2015.02.23 내가 만든 소스를 포함해서 docker 이미지 빌드하기 (0) 2015.01.30 간단한 docker 명령어들 (0) 2015.01.26 맥 os x에 docker 설치하기 (0) 2015.01.23 댓글