<aside> ℹ️ Dokerfile은 이미지를 빌드하는데 필요한 모든 명령이 순서대로 포함된 텍스트 파일입니다.

</aside>

Dockerfile 작성 모범 사례 개요

Dockerfile 참조

키워드 설명 예시
FROM 기본 이미지 설정 **FROM** alpine:latest
SHELL 기본 쉘 지정 **SHELL** ["/bin/sh", "-c"]
WORKDIR 작업 디렉토리 변경 (default: /) **WORKDIR** /app
USER 실행 사용자 또는 그룹 설정 (default: root) **USER** minjungk:42seoul
RUN 이미지 빌드 시 실행할 명령어
(이미지 레이어 생성) **RUN** echo -n hello
**RUN** ["echo", "-n", "hello"]
ADD 로컬 파일 또는 URL을 컨테이너 내로 압축을 풀어서 복사 **ADD** <https://example.com/file.tar.gz> /tmp/
COPY 로컬 파일을 컨테이너 내로 복사 **COPY** app.jar /app/
ENV Runtime 환경 변수 설정 **ENV** DB_HOST=localhost
ARG Build-time 환경 변수 설정 **ARG** APP_VERSION=1.0
CMD 컨테이너 시작 시 실행할 명령어 설정 **CMD** ["java", "-jar", "app.jar"]
**ENTRYPOINT** 컨테이너 시작 시 실행할 주요 명령어 설정 **ENTRYPOINT** ["nginx", "-g", "daemon off;"]
ONBUILD 상속 이미지에서 실행할 기본 명령어 지정 **ONBUILD** <INSTRUCTION>
**ONBUILD** ADD web.tar /var/www/html
EXPOSE 컨테이너가 사용하는 포트 노출 예정

--interval: 헬스체크 간격 (default: 30s) --timeout: 타임아웃 시간 (default: 30s) --retries: 타임아웃 횟수 (default: 3) | **HEALTHCHECK** NONE **HEALTHCHECK** --timeout=10s CMD curl -f <http://localhost> || exit 1 |

Dockerfile 일반 지침

  1. 다단계 빌드
  2. .dockerignore
  3. 임시 컨테이너 생성
  4. 불필요한 패키지 제거
  5. 애플리케이션 분리
  6. 여러 줄 인수 정렬
  7. 빌드 캐시 활용

Dockerfile 모범 사례

보안 모범 사례

  1. 신뢰할 수 있는 소스에서 올바른 기본 이미지 선택하고 작게 유지