인프라 | CICD/Docker

Dockerfile 명령어 정리

냠냠:) 2024. 2. 13. 12:49

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

 

Reference

 
반응형