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

</aside>

Dockerfile 작성 모범 사례 개요

Dockerfile 참조

키워드 설명 예시
https://docs.docker.com/engine/reference/builder/#from 기본 이미지 설정 FROM alpine:latest
https://docs.docker.com/engine/reference/builder/#shell 기본 쉘 지정 SHELL ["/bin/sh", "-c"]
https://docs.docker.com/engine/reference/builder/#workdir 작업 디렉토리 변경 (default: /) WORKDIR /app
https://docs.docker.com/engine/reference/builder/#user 실행 사용자 또는 그룹 설정 (default: root) USER minjungk:42seoul
https://docs.docker.com/engine/reference/builder/#run 이미지 빌드 시 실행할 명령어
(이미지 레이어 생성) RUN echo -n hello
RUN ["echo", "-n", "hello"]
https://docs.docker.com/engine/reference/builder/#add 로컬 파일 또는 URL을 컨테이너 내로 압축을 풀어서 복사 ADD https://example.com/file.tar.gz /tmp/
https://docs.docker.com/engine/reference/builder/#copy 로컬 파일을 컨테이너 내로 복사 COPY app.jar /app/
https://docs.docker.com/engine/reference/builder/#env Runtime 환경 변수 설정 ENV DB_HOST=localhost
https://docs.docker.com/engine/reference/builder/#arg Build-time 환경 변수 설정 ARG APP_VERSION=1.0
https://docs.docker.com/engine/reference/builder/#cmd 컨테이너 시작 시 실행할 명령어 설정 CMD ["java", "-jar", "app.jar"]
https://docs.docker.com/engine/reference/builder/#entrypoint 컨테이너 시작 시 실행할 주요 명령어 설정 ENTRYPOINT ["nginx", "-g", "daemon off;"]
https://docs.docker.com/engine/reference/builder/#onbuild 상속 이미지에서 실행할 기본 명령어 지정 ONBUILD <INSTRUCTION>
ONBUILD ADD web.tar /var/www/html
https://docs.docker.com/engine/reference/builder/#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. 신뢰할 수 있는 소스에서 올바른 기본 이미지 선택하고 작게 유지