Dockerfile 명령어

Dockerfile 명령어

Dockerfile은 이미지의 청사진이라 할 수 있다.
즉, Dockerfile 문법에 맞게 명령문을 작성하고, 이 파일을 빌드하여
우리가 원하는 이미지를 생성해 낼 수 있다.

Dockerfile은 명령과 인자로 구성되며, 보통 명령은 대문자로 작성한다.
#을 사용하면 해당줄은 주석처리된다.


명령어

주요 명령들을 설명한다.

일부 명령어들이 제공하는 명령어 형식들 중 exec 형식의 명령어는 JSON array로 구분되기 때문에 반드시 쌍따옴표(")만 사용할 수 있다.

FROM

FROM은 우리가 만들 이미지의 베이스 이미지를 지정하는 명령어이다.

FROM <Image Name>:<Image Tag> FROM ubuntu:latest

RUN

RUN은 이미지가 빌드될 때 shell에서 실행되는 명령어로, 쉘 명령을 실행한다.
주로 shell 명령어를 사용하여 새로운 이미지 레이어를 만드는 역할을 한다.

# RUN 명령어는 두가지 형식를 제공한다. # shell RUN <Command> RUN apt-get install nano # exec RUN ["Command", "Param 1", "Param N.."] RUN ["apt-get", "install", "nano"]

CMD

CMD명령어는 컨테이너가 실행될 때 실행되는 명령어로,
Dockerfile에서 하나만 사용할 수 있다.
만약 CMD가 여러개가 있다면 가장 마지막에 CMD만 실행된다.

CMD의 주된 목적은 컨테이너에 기본값을 제공하는 것이다.
예를 들어 실행중인 작업이 없는 컨테이너는 종료되기 때문에
CMD를 사용하여 bin/bash같은 프로그램들을 실행한다.

# CMD 명령어는 세 가지 형식를 제공한다. # shell : 이 형식을 사용하면 <Command>는 /bin/sh -c 에서 실행된다. CMD <Command> <Param 1> <Param N..> CMD /bin/bash # exec : 권장되는 형식이다. CMD ["Executable", "Param 1", "Param N.."] CMD ["/bin/bash"]

CMD의 형식들 중 마지막 형식은 exec형식에서 Executable을 생략한 형식으로,
ENTRYPOINT 명령어의 파라미터로 사용된다.
이 형식을 사용할 경우 ENTRYPOINT명령어도 지정해 주어야한다.

CMD 와 RUN 은 비슷한 부분이 많지만 RUN 은 이미지가 빌드될 때 실행되어 결과를 이미지에 저장하지만, CMD는 빌드될 때는 아무것도 하지않으며 오직 컨테이너가 실행될 때에만 명령어가 실행된다.

LABEL

LABEL명령어는 이미지에 대한 메타데이터를 작성하기위한 명령어이다.
키와 값이 한쌍으로 사용된다.

LABEL <key>=<value> <key>=<value> <key>=<value> ... LABEL version=0.1

EXPOSE

EXPOSE명령어는 컨테이너가 특정 포트를 열어두었음을 Docker에게 알려준다.
포트가 TCP/UDP 중 어떤 방식으로 데이터를 송수신할 지 지정할 수 있으며
이 프로토콜을 지정하지 않으면 기본값인 TCP가 적용된다.

EXPOSE <Port>/<Protocol> EXPOSE 80 EXPOSE 8080/udp

EXPOSE 명령어는 실제 서버의 포트를 여는것이 아닌, 컨테이너의 포트를 열어두는 것이다.

ENV

ENV명령어는 컨테이너 내부에서 사용될 환경변수를 지정한다.

ENV <key>=<value> ... ENV MY_NAME="MaJaeGeon"

COPY

Dockerfile의 경로를 기준으로 특정경로의 파일들을 이미지 내부의 경로에 복사한다.

COPY [Specific Path] [Image Inner Path]

ADD

COPY명령어와 같은 작업을 수행하지만 동일한 이름의
파일이나 디렉토리를 덮어쓰기하지 않음

COPY [Specific Path] [Image Inner Path]

ENTRYPOINT

Container 실행시 반드시 실행되어야할 명령어를 입력한다. 예를들어 DB서버의 경우 DB를 실행하는 명령어가 입력된다.

ENTRYPOINT ["Command", "Param 1", "Param N.."]

VOLUME

Container 내부의 Volume 대상을 지정한다.

VOLUME ["Volume 1", "Volume 2", "Volume N.."]

USER

명령을 실행할 사용자 계정을 지정한다.

USER [User Name]

WORKDIR

RUN, CMD, ENTRYPOINT 명령이 실행될 경로를 지정한다.

WORKDIR [Path]


이 명령어들 외에도 다른 명령어들이 있으며
명령어들의 자세한 설명은 Dockerfile Reference를 참고하면된다.