320x100
320x100

DockerFile

: docker 컨테이너를 실행할 때 바탕이 되는 이미지를 만들기 위해 작성하는 파일

 

- 도커 파일의 구조

: 대문자로 이루어진 지시어 (instruction으로 구성)

: FROM / RUN / ENV / CMD 등

 

- 예시

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

 

 

 

 

 

FROM

: 베이스 이미지 (Base Image)를 지정

: 지정된 이미지를 도커 이미지 레지스트리(저장소)인 docker hub로 부터 다운로드 받고, 이를 바탕으로 이미지를 빌드

FROM [--platform=<platform>] <image>[:<tag>|@<digest>] [AS <name>]

# --platform = 이미지의 플랫폼. windows/amd64, linux/arm64 등
# image = 지정할 이미지
# tag = 이미지의 태그명 (일종의 버전)
# digest = 태그의 다이제스트 값 (일종의 버전)
# AS = 지정한 이미지의 별명 (멀티 스테이지 빌드 시 이용)

FROM ubuntu:18.04

 

 

 

 

 

RUN

: 도커 이미지 내에서 실행할 명령어를 지정

: 컨테이너 이미지를 빌드할 때 실행

: shell form 형식과 exec form 형식이 존재

RUN <command>|["executable", "param1", "param2"]

RUN /bin/bash -c update.sh
RUN ["/bin/bash", "-c", "update.sh"]

 

 

 

 

 

CMD

: 컨테이너가 시작될 때 실행할 명령어를 지정

: 빌드가 완료되고 컨테이너의 실행이 시작될 때 실행됨

: docker run 명령으로 직접 실행할 명령어를 지정하여 컨테이너를 실행할 경우 CMD의 명령어는 실행되지 않음

CMD <command>|["executable", "<param1>", "<param2>"]

CMD /bin/bash -c update.sh
CMD ["/bin/bash", "-c", "update.sh"]

 

 

 

 

 

ENTRYPOINT

: 컨테이너가 시작될 때 실행할 명령어를 지정

: 빌드가 완료되고 컨테이너의 실행이 시작될 때 실행됨

: CMD와 다른 점은 docker run 명령으로 직접 실행할 명령어를 지정하면 ENTRY POINT의 파라미터로 인식이 됨

: 한 도커 파일 내에서 ENTRYPOINT가 여러 개 나올 경우 맨 마지막 줄의 명령만 유효 (한 번만 작성 가능)

ENTRYPOINT <command>|["executable", "<param1>", "<param2>"]

ENTRYPOINT /bin/bash -c update.sh
ENTRYPOINT ["/bin/bash", "-c", "update.sh"]

 

 

 

 

 

LABEL

: 메타데이터를 지정

LABEL <key>=<value> <key>=<value> <key>=<value> 

LABEL multi.label1="value1" multi.label2="value2" other="value3"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

 

 

 

 

 

ENV

: 환경변수를 설정

: 컨테이너가 실행되고 나서도 유효

: docker run -e 옵션으로 덮어쓰기 가능

ENV <key>=<value> <key>=<value> <key>=<value> ...

ENV NAME="Toram"
ENV VERSION=$NAME

 

 

 

 

 

ARG

: 도커 이미지를 빌드할때 초기화 할 수 있는 변수 (기본 값이 없어도 됨)

:  docker build --build-arg <변수명>=<값> 명령으로 ARG 변수명을 초기화 가능

: FROM 보다 위에 위치할 수 있어, 이를 통해 유동적으로 베이스 이미지를 지정할 수 도 있다

: 이미지를 빌드할때만 유효

ARG 변수명=값

ARG NAME
ARG VERSION=latest
FROM busybox:$VERSION

 

 

 

 

 

EXPOSE

: 컨테이너가 실행될 때 호스트에 공개할 포트 지정

: 컨테이너 내부의 프로세스가 8000번 포트로 통신한다면 EXPOSE로 8000번 포트를 열어야 데이터를 받을 수 있다

EXPOSE <port> [<port>/<protocol>...]

EXPOSE 80/tcp
EXPOSE 80/udp

 

 

 

 

 

ADD 

: 컨테이너로 복사할 호스트에 있는 파일 또는 디렉터리

: URL을 지정하여 네트워크에서 받아와야하는 파일 및 디렉터리도 복사 가능

ADD [--chown=<user>:<group>] [--chmod=<perms>] [--checksum=<checksum>] <src>... <dest>
ADD [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]

ADD hom?.txt /mydir/
ADD --chown=myuser:mygroup --chmod=655 files* /somedir/
ADD --checksum=sha256:24454f830cdb571e2c4ad15481119c43b3cafd48dd869a9b2945d1036d1dc68d https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz /
ADD . /dist_dir

 

 

 

 

 

COPY

: 컨테이너로 복사할 호스트에 있는 파일 또는 디렉터리

COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

COPY hom?.txt /mydir/
COPY --chown=myuser:mygroup --chmod=644 files* /somedir/
COPY . /dist_dir

 

 

 

 

 

USER

: 컨테이너 내에서 명령을 실행할 사용자 및 그룹

USER <user>[:<group>]
USER <UID>[:<GID>]

USER 2mukee:comeve

 

 

 

 

 

WORKDIR

: 작업 디렉터리 지정

: RUN cd와 다른 점은 이동하려는 디렉터리가 존재하지 않는 경우 생성하고 이동을 수행한다는점

WORKDIR /path/to/workdir

WORKDIR /home/2mukee

 

 

 

 

 

VOLUME

: 호스트에 마운트 시킬 컨테이너 내 디렉터리

: 컨테이너가 삭제되어도 보존할 데이터의 내부경로를 외부로 연결

: 기본적으로 호스트의 /var/lib/docker/volumes/{volume hash 값} 경로에 생성됨

: 호스트에서의 저장 경로를 변경하기 위해서는 docker run -v [호스트 경로]:[컨테이너 내 경로]로 실행해야함

VOLUME ["/data1", "/data2"]

VOLUME /var/lib/mysql
VOLUME vol1 vol2 # /vol1 /vol2와 동일

 

 

 

 

 

ONBUILD

: 다음에 빌드할 이미지에서 적용할 지시자를 지정

: 작성한 이미지가 다른 이미지의 베이스 이미지가 되어 빌드될 때 적용될 지시자를 의미

ONBUILD <INSTRUCTION>

ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src

 

 

 

 

 

STOPSIGNAL

: docker container stop 명령 등으로 docker 데몬이 컨테이너에게 보낼 시그널

: 기본적으로는 SIGTERM 시그널을 보내 정상적으로 종료될때까지 대기

: nginx를 통해 유닉스 소켓을 사용하면 컨테이너 중지 시 nginx가 중단되는 문제가 있어 SIGQUIT를 사용하는 것을 권장하기도 함

STOPSIGNAL signal

STOPSIGNAL SIGKILL
STOPSIGNAL 9

 

 

 

 

 

HEALTHCHECK

: 컨테이너에서 실행되는 프로세스의 상태를 체크

: 한 도커 파일 내에서 HEALTHCHECK가 여러 개 나올 경우 맨 마지막 줄의 명령만 유효 (한 번만 작성 가능)

HEALTHCHECK [OPTIONS] CMD command

# --interval=DURATION (default: 30s) 헬스체크 간격
# --timeout=DURATION (default: 30s) 타임아웃 시간
# --start-period=DURATION (default: 0s) 부트스트랩 시간이 필요한 컨테이너 초기화 시간 (해당 시간 동안은 실패해도 재시도 카운트에 포함하지 않음)
# --start-interval=DURATION (default: 5s) start-period 동안의 헬스체크 간격
# --retries=N (default: 3) 헬스체크 실패 시 최대 재시도 횟수

# 0: success 컨테이너가 정상인 상태
# 1: unhealthy 컨테이너가 올바르게 작동하지 않는 상태
# 2: reserved 예약된 코드
# docker container inspect 혹은 docker container ls로 확인가능

HEALTHCHECK --interval=10s --timeout=3s CMD curl -f http://127.0.0.1/ || exit 1

 

 

 

 

 

SHELL

: 이미지 빌드 및 컨테이너 빌드 시의 기본 쉘 설정 (RUN / CMD / ENTRYPOINT 등)

: 기본 값은 /bin/sh

SHELL ["executable", "parameters"]

SHELL ["powershell", "-command"]

 

 

 

 

 

 

Reference

 

docker :: 도커파일(Dockerfile) 의 개념, 작성 방법/문법, 작성 예시

1. 도커파일(Dockerfile) 이란? 도커파일은 docker 에서 이미지를 생성하기 위한 용도로 작성하는 파일이다. 만들 이미지에 대한 정보를 기술해 둔 템플릿(template) 이라고 보면 된다. 도커 이미지를 만

toramko.tistory.com

 

Dockerfile reference

 

docs.docker.com

 

[docker] RUN vs CMD vs ENTRYPOINT

http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/ 정리[요약]1. 실행방식2가지 방식으로 R...

blog.naver.com

 

[Docker CE] dockerfile 명령어 정리 (4) (USER, LABEL, EXPOSE, VOLUME)

1편 (RUN, CMD, ENTRYPOINT) : https://nirsa.tistory.com/66?category=868315 2편 (ONBUILD, STOPSIGNAL, HEALTHCHECK) : https://nirsa.tistory.com/68?category=868315 3편 (COPY, ADD, ENV, ARG, WORKDIR) : https://nirsa.tistory.com/69?category=868315 10. USER US

nirsa.tistory.com

 

[Docker] Dockerfile ONBUILD 명령

다음 책을 참고하여 작성하였습니다. www.aladin.co.kr/shop/wproduct.aspx?ItemId=166082298 완벽한 IT 인프라 구축을 위한 Docker 컨테이너 기술을 사용한 애플리케이션 실행 환경 플랫폼인 ‘Docker’를 사용하

kimjingo.tistory.com

 

[Docker CE] dockerfile 명령어 정리 (2) (ONBUILD, STOPSIGNAL, HEALTHCHECK)

1편 (RUN, CMD, ENTRYPOINT) : https://nirsa.tistory.com/66?category=868315 3편 (COPY, ADD, ENV, ARG, WORKDIR) : https://nirsa.tistory.com/69?category=868315 4편 (USER, LABEL, EXPOSE, VOLUME) : https://nirsa.tistory.com/70?category=868315 4. ONBUILD ONBUL

nirsa.tistory.com

 

300x250
728x90