Docker

[Docker] DockerFile 명령어 정리: ADD, COPY, CMD, ENTRYPOINT, ARG, ENV 등

JustJunsu 2024. 9. 25. 18:07
728x90

Dockerfile은 컨테이너 이미지를 정의하기 위한 필수 파일로, 다양한 명령어를 통해 이미지 내부 환경을 구성할 수 있습니다. 이번 포스팅에서는 Dockerfile에서 자주 사용되는 명령어들의 기능과 사용법을 정리해보겠습니다.

1. ADD 

파일 또는 디렉토리를 컨테이너 안으로 복사하는 명령어입니다.

  • URL을 통해 파일을 복사할 수 있습니다.
  • 압축 파일을 자동으로 압축 해제하여 복사합니다.
ADD <URL, tar 등 복사할 파일 혹은 디렉토리> <이미지내에 복사할 디렉토리>

ADD https://example.com/file.tar.gz /app


2. COPY

호스트의 파일 또는 디렉토리를 컨테이너 안으로 복사하는 명령어입니다.
압축 파일은 자동으로 압축 해제되지 않으며, 로컬 파일에만 적용됩니다.

COPY <복사할 파일 혹은 디렉토리> <이미지내에 복사할 디렉토리>

COPY ./source /app

 

3. CMD

컨테이너가 실행될 때 기본적으로 실행될 명령어를 지정합니다.
docker run 명령어로 인자를 제공하면 CMD 명령어가 덮어씌워질 수 있습니다.

CMD ["실행할 명령어", "인자"]

CMD ["echo","hello"]


4.ENTRYPOINT

컨테이너가 실행될 때 항상 실행될 명령어를 지정합니다.
docker run 명령어로 인자를 제공해도 ENTRYPOINT는 실행됩니다.

ENTRYPOINT ["실행할 명령어", "인자"]

ENTRYPOINT ["python","hello.py"]

5.ARG

Dockerfile 내에서만 사용되는 변수를 선언합니다.
ARG로 선언한 변수는 빌드 시점에만 사용되며, 런타임에는 사용할 수 없습니다.

ARG 변수명=기본값
CMD ${변수명}/script.sh


ARG DIR=/root
CMD ${DIR}/hell.sh

6. ENV

도커 컨테이너 내에서 사용될 수 있는 변수를 선언합니다.
ENV로 선언된 변수는 런타임 동안 유효합니다.

ENV 변수명=값

ENV PYTHONPATH=/app
ENV PYTHONDONTWRITEBYTECODE=1


7. EXPOSE

컨테이너가 외부와 통신하기 위해 사용하는 포트를 명시합니다.
단순히 포트를 지정할 뿐, 실제 포트를 노출하려면 docker run -p 옵션을 사용해야 합니다.

EXPOSE <포트 번호>

EXPOSE 8080


8. FROM

이미지를 기반으로 새로운 이미지를 생성할 때 사용합니다.
기본 이미지를 명시하여 해당 이미지를 기준으로 새로운 이미지를 만듭니다.

FROM <이미지 이름>

FROM python:3.8-slim


9. HEALTHCHECK

컨테이너의 상태를 모니터링하기 위한 명령어입니다.
특정 간격마다 명령어를 실행하여 컨테이너가 정상적으로 동작하는지 확인합니다.

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s CMD curl -f http://localhost/ || exit 1

HEALTHCHECK CMD curl --fail http://localhost:8080/health || exit 1


10. LABEL

이미지에 메타데이터를 추가합니다.
주로 이미지의 설명, 버전, 유지관리자 정보 등을 저장할 때 사용합니다.

LABEL key=value

LABEL version="1.0" description="My Docker Image" maintainer="user@example.com"


11. MAINTAINER

이미지를 유지관리하는 사람의 정보를 명시합니다.
LABEL로 대체되었지만 여전히 사용될 수 있습니다.

MAINTAINER <유지관리자 이메일>

MAINTAINER user@example.com


12. ONBUILD

이미지를 기반으로 다른 이미지를 빌드할 때 실행될 명령어를 정의합니다.
FROM으로 해당 이미지를 사용할 때 트리거됩니다.

ONBUILD <명령어>

ONBUILD ADD . /app/src


13. RUN

이미지 빌드 중에 실행할 명령어를 지정합니다.
보통 패키지 설치나 파일 복사 등의 작업에 사용됩니다.

RUN <명령어>

RUN apt-get update && apt-get install -y python3


14. SHELL

RUN 명령어에서 사용할 셸을 지정합니다.
기본 셸 외에 다른 셸을 사용하고 싶을 때 유용합니다.

SHELL ["/bin/bash", "-c"]

SHELL ["/bin/sh", "-c"]


15. STOPSIGNAL

컨테이너를 종료할 때 사용할 신호를 지정합니다.

STOPSIGNAL <신호>

STOPSIGNAL SIGTERM


16. USER

명령어를 실행할 사용자 또는 그룹을 설정합니다.
기본적으로 root 권한을 사용하지만, 권한을 제한할 때 유용합니다.

USER <사용자명>

USER nonroot


17. VOLUME

컨테이너에서 사용할 볼륨을 설정합니다.
호스트와 컨테이너 간에 데이터를 공유할 수 있습니다.

VOLUME ["/data"]

VOLUME ["/app/logs"]


18. WORKDIR

컨테이너에서 작업 디렉토리를 설정합니다.
이후에 실행되는 모든 명령은 해당 디렉토리에서 실행됩니다.

WORKDIR <디렉토리>

WORKDIR /app

 

https://docs.docker.com/reference/dockerfile/

 

Dockerfile reference

Find all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.

docs.docker.com

728x90