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
'Docker' 카테고리의 다른 글
[Docker] NGINX란? Docker와 FastAPI를 활용한 서버 구축 실습 (6) | 2024.11.17 |
---|---|
Docker를 이용한 ChromaDB와 데이터 생성 컨테이너 연동하기 (2) | 2024.11.15 |
[Docker] Zookeeper와 Kafka 설치 및 연동 가이드: Docker Compose로 간편하게 설정하기 (0) | 2024.11.10 |
[Docker] Docker와 PostgreSQL을 이용한 데이터 생성 시스템 구축하기 (2) | 2024.10.06 |
[Docker] Ubuntu 22.04 환경에서 도커 설치하기 (0) | 2024.09.23 |