Docker file
FROM
베이스 도커 이미지 지정(흔히 OS, 프로그래밍 언어환경의 이미지를 선택) 반드시 한 번 이상 입력해야하며 Dockerfile 최상단에 위치합니다.
FROM openjdk:8
FROM <image>
FROM <image>:<tag>
공식 이미지는 Docker Hub 참조
RUN
쉘 커맨드를 도커 이미지에서 실행. 이미지 빌드 과정에서 필요한 cmd를 실행하기 위해 사용
RUN mkdir volume
RUN npm install --silent
RUN apk add binutils
RUN ["executable", "param1", "param2"]
RUN <command>
LABEL
도커 이미지에 메타데이터를 추가할 수 있습니다. key-value pair 형태입니다.
docker inspect 명령어로 생성한 LABEL을 확인할 수 있습니다
LABEL "com.example.vendor"="ACME Incorporated"
LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"
LABEL <key>=<value> <key>=<value> <key>=<value> ...
ENV
ENV 명령어는 도커 이미지 내 환경 변수를 설정하기 위해서 사용 됩니다.
ENV PROJECT_PATH="/app"
ENV SPRING_PROFILES_ACTIVE="dev"
ENV <key>=<value> ...
EXPOSE
도커 컨테이너 외부에 노출할 포트를 지정합니다. 자동으로 호스트 포트와 연결하지 않으므로 도커 컨테이너 실행 시 -p 옵션으로 매핑해주어야 합니다.
EXPOSE 8080
EXPOSE 80/tcp
EXPOSE <port> [<port>/<protocol>...]
ADD, COPY
COPY는 호스트 컴퓨터에 있는 디렉토리나 파일을 도커 이미지의 파일시스템으로 복사하기 위해 사용합니다. 만약 디렉토리가 없다면 새로 생성해서 복사합니다.
ADD는 압축파일이나 네트워크상의 파일도 사용할 수 있습니다. 특수한 상황이 아니라면 COPY를 사용하는 것을 권장합니다.
ADD ./ /app # 현재 도커파일이 위치한 폴더의 모든 데이터를 도커 컨테이너 내부 /app 폴더로 복사합니다.
ADD [--chown=<user>:<group>] [--checksum=<checksum>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
COPY test.txt relativeDir/
COPY test.txt /absoluteDir/
COPY <src>... <dest>
COPY ["<src>",... "<dest>"]
ARG
ARG 명령문은 docker build 커맨드로 이미지를 빌드시, --build-arg 옵션을 통해 넘길 수 있는 인자를 정의하기 위해 사용 됩니다.
# 도커파일 내
ARG ENVIRONMENT
ENV SPRING_PROFILES_ACTIVE=${ENVIRONMENT}
# 도커 이미지 빌드 시
docker build -t demo:latest --build-arg ENVIRONMENT=dev .
ARG <name>[=<default value>]
VOLUME
호스트의 폴더를 도커 컨테이너에 연결 시킬 수 있습니다. 도커 내부에서 호스트 컴퓨터에서 지정한 곳의 파일을 읽거나 쓰거나 할 수 있습니다.
VOLUME ["/volume"]
# 도커 컨테이너 실행 시 (/home/test 디렉터리와 도커 내 /volume 디렉터리 연결)
docker run -it -v ~/test:/volume demo:latest
WORKDIR
현재 작업폴더를 지정합니다. 리눅스 cd 커맨드를 떠올리면 됩니다.
WORKDIR 명령어로 작업 디렉토리를 전환하면 그 이후에 사용하는 모든 RUN, CMD, ENTYPOINT, COPY, ADD 명령어들은 해당 디렉토리를 기준으로 실행 됩니다.
WORKDIR /app
WORKDIR /path/to/workdir
ENTRYPOINT
도커 이미지가 실행될 때 기본 커맨드를 지정합니다.
컨테이너가 시작될 때 수행할 명령을 지정한다는 점에서 CMD 명령어와 같지만, entrypoint는 커맨드를 인자로 받아 사용할 수 있는 스크립트의 역할을 할 수 있다는 점에서 다릅니다.(=오버라이드가 가능함)
ENTRYPOINT ["java","-Xmx2048m","-jar","/demo.jar"]
ENTRYPOINT ["executable", "param1", "param2"]
CMD
쉘 커맨드를 도커 이미지에서 실행합니다. 도커 컨테이너가 시작될 때 실행되며 Dockerfile에서 한 번만 사용할 수 있습니다.
CMD ["java", "-jar", "demo-0.0.1-SNAPSHOT.jar"]
CMD ["executable","param1","param2"] // exec form, this is the preferred form
CMD ["param1","param2"] // as default parameters to ENTRYPOINT
CMD command param1 param2 // shell form