Dockerfile 이라는 파일에 docker에서 필요한 설정들을 해서 컨테이너를 원하는대로 설정할 수 있다.
Dockerfile을 생성한 후 아래처럼 소스경로를 포함해서 빌드명령을 내리면 해당 경로를 기준으로 빌드가 실행된다.
docker build /your/source/path
빌드에서 제외할 파일들은 .dockerignore 파일에 명시해서 제외할 수 있다.
Dockfile안의 명령어들은 독립적으로 실행되어서 다음에 실행되는 명령에 영향을 미치지 않는다.
Dockfile 구조
#을 이용해서 주석처리
"명령어 인자”의 형식
명령어는 대소문자를 구분하지는 않으나 가급적 대문자를 이용하는것이 보기 좋음.
각 명령어는 위에서부터 순서대로 실행됨
첫번째 명령어는 반드시 ‘FROM'이어야 함.
ENV 명령어로 환경변수를 선언해서 사용할 수 있음.
사용할때는 ‘$변수명’, ‘${변수명}’ 형식으로 사용함.
예제
FROM busybox
ENV foo /bar
WORKDIR ${foo} # WORKDIR /bar
ADD . $foo # ADD . /bar
COPY $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 param2
ENTRYPOINT를 이용해서 컨테이너를 실행가능한 형태로 만들수 있다.
VOLUME ["/data"]
지정된 이름으로 마운트 지점을 생성한다.
USER daemon
이미지를 실행할때 사용할 사용자명이나 UID를 지정한다.
WORKDIR /path/to/workdir
RUN, CMD, ENTRYPOINT 명령어가 실행되는 작업 디렉토리를 설정한다.
ONBUILD [INSTRUCTION]
현재 이미지가 나중에 다른 빌드의 기본 이미지로 사용될때, 그때 이 이미지에 실행될 트리거 명령을 추가한다.
Dockerfile 예제
# Nginx
#
# VERSION 0.0.1
FROM ubuntu
MAINTAINER Victor Vieux <victor@docker.com>
RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
# Firefox over VNC
#
# VERSION 0.3
FROM ubuntu
# ‘fake’ 디스플레이와 파이어폭스를 만들기위해 vnc, xvfb 설치
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc
# 패스워드 설정
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# 파이어폭스 자동시작
RUN bash -c 'echo "firefox" >> /.bashrc'
EXPOSE 5900
CMD ["x11vnc", "-forever", "-usepw", "-create"]
# 다중 이미지 예제
#
# VERSION 0.1
FROM ubuntu
RUN echo foo > bar
# 출력은 다음과 같다. ===> 907ad6c2736f
FROM ubuntu
RUN echo moo > oink
# 출력은 다음과 같다.===> 695d7793cbe4
# /bar를 가진 907ad6c2736f, /olink를 가진 695d7793cbe4 2개의 이미지가 생성됨.
|
참고