Dockerfile

Dockerfile의 빌드 명령, 패키지 관리와 컨테이너 실행 설정을 점검하는 문서입니다.

문서 목록

문서 경로
ADD 대신 COPY 사용 dockerfile/add_instead_of_copy
CMD와 ENTRYPOINT에 JSON 형식 미사용 dockerfile/not_using_json_in_cmd_and_entrypoint_arguments
COPY 파일 소유권과 쓰기 권한 점검 dockerfile/chown_flag_exists
현재 빌드 단계를 참조하는 COPY --from dockerfile/copy_from_references_current_from_alias
FROM 플랫폼 지정의 의도 점검 dockerfile/using_platform_with_from
컨테이너 상태 점검 구성 확인 dockerfile/healthcheck_instruction_missing
MAINTAINER 지시어 사용 dockerfile/maintainer_instruction_being_used
RUN cd에 의존하는 작업 디렉터리 설정 dockerfile/run_command_cd_instead_of_workdir
Dockerfile의 apt 자동화 사용 점검 dockerfile/run_using_apt
RUN에서 sudo 사용 dockerfile/run_using_sudo
RUN으로 기본 셸 변경 dockerfile/changing_default_shell_using_run_command
컨테이너의 SSH 포트 선언 점검 dockerfile/exposing_port_22
USER 명령이 없는 Dockerfile dockerfile/missing_user_instruction
apk 설치 캐시 관리 점검 dockerfile/apk_add_using_local_cache_path
apk 패키지 버전 고정 누락 dockerfile/unpinned_package_version_in_apk_add
apt-get 패키지 버전 고정 누락 dockerfile/apt_get_install_pin_version_not_defined
apt-get 설치 확인 입력 점검 dockerfile/apt_get_missing_flags_to_avoid_manual_input
apt-get 추천 패키지 설치 범위 점검 dockerfile/apt_get_not_avoiding_additional_packages
apt-get 패키지 목록 정리 점검 dockerfile/apt_get_install_lists_were_not_deleted
dnf 설치 캐시 정리 점검 dockerfile/missing_dnf_clean_all
dnf 설치 확인 입력 점검 dockerfile/missing_flag_from_dnf_install
dnf 패키지 버전 고정 누락 dockerfile/missing_version_specification_in_dnf_install
gem 패키지 버전 고정 누락 dockerfile/gem_install_without_version
latest 태그 사용 dockerfile/image_version_using_latest
npm 패키지 버전 고정 누락 dockerfile/npm_install_without_pinned_version
pip 설치 캐시의 이미지 포함 점검 dockerfile/pip_install_keeping_cached_packages
pip 패키지 버전 고정 누락 dockerfile/unpinned_package_version_in_pip_install
패키지 인덱스 갱신과 설치 분리 점검 dockerfile/update_instruction_alone
wget과 curl의 중복 사용 점검 dockerfile/run_using_wget_and_curl
yum 설치 캐시 정리 점검 dockerfile/yum_clean_all_missing
yum 설치 확인 입력 점검 dockerfile/yum_install_allows_manual_input
yum 패키지 버전 고정 누락 dockerfile/yum_install_without_version
zypper 비대화형 옵션 누락 dockerfile/missing_zypper_non_interactive_switch
zypper 캐시 정리 점검 dockerfile/missing_zypper_clean
zypper 패키지 버전 미고정 dockerfile/zypper_install_without_version
Dockerfile 레이어와 임시 파일 관리 점검 dockerfile/multiple_run_add_copy_instructions_listed
마지막 사용자가 root인 Dockerfile dockerfile/last_user_is_root
베이스 이미지 버전 미지정 dockerfile/image_version_not_explicit
RUN의 진단 명령 사용 점검 dockerfile/run_utilities_and_posix_commands
중복된 빌드 단계 이름 dockerfile/same_alias_in_different_froms
한 빌드 단계의 여러 CMD 지시어 dockerfile/multiple_cmd_instructions_listed
한 빌드 단계의 여러 ENTRYPOINT 지시어 dockerfile/multiple_entrypoint_instructions_listed
여러 원본을 복사하는 COPY의 대상 경로 오류 dockerfile/copy_with_more_than_two_arguments_not_ending_with_slash
원격 아티팩트 다운로드의 무결성 검증 점검 dockerfile/curl_or_wget_instead_of_add
EXPOSE 포트 번호 범위 점검 dockerfile/unix_ports_out_of_range
숫자로 참조하는 빌드 단계 dockerfile/using_unnamed_build_stages
상대 경로를 사용하는 WORKDIR 점검 dockerfile/workdir_path_not_absolute
파이프 명령에서 pipefail 미설정 dockerfile/shell_running_a_pipe_without_pipefail_flag

관련 문서48

ADD 대신 COPY 사용

로컬 파일 복사에는 COPY를 사용하고 원격 아티팩트의 무결성은 별도로 검증하세요.

CMD와 ENTRYPOINT에 JSON 형식 미사용

CMD와 ENTRYPOINT의 명령·인자를 명확히 지정하고 종료 신호 처리를 확인하세요.

COPY 파일 소유권과 쓰기 권한 점검

실행 계정에는 필요한 데이터 쓰기 권한만 주고 애플리케이션 코드는 보호하세요.

현재 빌드 단계를 참조하는 COPY --from

COPY --from이 현재 단계 자신을 참조하지 않도록 빌드 의존성을 정리하세요.

FROM 플랫폼 지정의 의도 점검

각 빌드 단계의 플랫폼을 실제 대상과 일치시키세요.

컨테이너 상태 점검 구성 확인

프로세스 실행 여부뿐 아니라 서비스 상태를 확인하는 점검을 구성하세요.

MAINTAINER 지시어 사용

Dockerfile의 MAINTAINER 지시는 더 이상 권장되지 않으며 LABEL로 메타데이터를 관리하는 편이 좋습니다.

RUN cd에 의존하는 작업 디렉터리 설정

이후 명령에도 적용할 작업 디렉터리는 WORKDIR로 선언하세요.

Dockerfile의 apt 자동화 사용 점검

자동화용 명령에는 apt-get과 apt-cache를 사용하세요.

RUN에서 sudo 사용

RUN의 실행 사용자를 명확히 지정하고 불필요한 sudo를 제거하세요.

RUN으로 기본 셸 변경

Dockerfile의 기본 셸을 바꿀 때는 SHELL 지시어로 명시하세요.

컨테이너의 SSH 포트 선언 점검

필요한 서비스 포트만 선언하고 실제 포트 공개와 SSH 접근을 별도로 제한하세요.

USER 명령이 없는 Dockerfile

최종 이미지의 기본 실행 사용자를 확인하고 애플리케이션을 필요한 최소 권한으로 실행하세요.

apk 설치 캐시 관리 점검

최종 이미지에 필요하지 않은 apk 캐시가 남지 않도록 설치 방식을 선택하세요.

apk 패키지 버전 고정 누락

Dockerfile에서 apk add 시 패키지 버전을 지정하지 않으면 빌드 결과가 달라질 수 있습니다.

apt-get 패키지 버전 고정 누락

apt-get install의 패키지 버전을 명시해 빌드 결과의 예기치 않은 변화를 줄이고, 보안 업데이트도 계속 관리합니다.

apt-get 설치 확인 입력 점검

apt-get 설치 확인을 자동화하고 패키지별 추가 입력도 점검하세요.

apt-get 추천 패키지 설치 범위 점검

필요한 패키지와 의존성을 확인하고 불필요한 추천 패키지 설치를 줄이세요.

apt-get 패키지 목록 정리 점검

패키지 설치와 목록 정리를 같은 RUN에서 처리하세요.

dnf 설치 캐시 정리 점검

dnf 설치와 캐시 정리를 같은 RUN에서 처리하세요.

dnf 설치 확인 입력 점검

dnf 설치 확인을 자동화하고 빌드가 입력 없이 끝나는지 시험하세요.

dnf 패키지 버전 고정 누락

Dockerfile에서 dnf install 시 패키지 버전을 지정하지 않으면 빌드 결과가 달라질 수 있습니다.

gem 패키지 버전 고정 누락

Dockerfile에서 gem install 시 버전을 지정하지 않으면 빌드 시점에 따라 다른 gem이 설치될 수 있습니다.

latest 태그 사용

Dockerfile에서 latest 태그를 사용하면 빌드 시점에 따라 다른 베이스 이미지가 내려받아질 수 있습니다.

npm 패키지 버전 고정 누락

Dockerfile에서 npm install 시 패키지 버전을 고정하지 않으면 빌드 결과가 달라질 수 있습니다.

pip 설치 캐시의 이미지 포함 점검

최종 이미지에는 불필요한 pip 캐시를 남기지 마세요.

pip 패키지 버전 고정 누락

Dockerfile에서 pip install 시 패키지 버전을 지정하지 않으면 빌드 시점에 따라 다른 라이브러리가 설치될 수 있습니다.

패키지 인덱스 갱신과 설치 분리 점검

패키지 인덱스 갱신과 설치를 같은 RUN에서 처리하세요.

wget과 curl의 중복 사용 점검

다운로드 요구가 같다면 한 도구로 통일하세요.

yum 설치 캐시 정리 점검

yum 설치와 캐시 정리를 같은 RUN에서 처리하세요.

yum 설치 확인 입력 점검

yum 설치 확인을 자동화하고 추가 입력 없이 빌드되는지 확인하세요.

yum 패키지 버전 고정 누락

Dockerfile에서 yum install 시 패키지 버전을 지정하지 않으면 빌드 시점에 따라 다른 패키지가 설치될 수 있습니다.

zypper 비대화형 옵션 누락

zypper 설치에서 확인 입력을 처리하고 자동 빌드의 실패 여부를 확인하세요.

zypper 캐시 정리 점검

설치와 zypper 캐시 정리를 같은 RUN에서 완료하세요.

zypper 패키지 버전 미고정

검증한 패키지 버전을 지정하고 보안 업데이트 계획을 함께 관리하세요.

Dockerfile 레이어와 임시 파일 관리 점검

설치·임시 파일 정리를 적절히 묶되 필요한 빌드 캐시 구조는 유지하세요.

마지막 사용자가 root인 Dockerfile

빌드에 필요한 root 작업을 마친 뒤 애플리케이션의 기본 실행 사용자를 비루트 계정으로 바꾸세요.

베이스 이미지 버전 미지정

Dockerfile의 FROM 이미지에 명확한 버전이나 다이제스트를 지정하지 않으면 빌드 결과가 달라질 수 있습니다.

RUN의 진단 명령 사용 점검

빌드에 필요한 명령만 실행하고 대화형 진단은 별도로 수행하세요.

중복된 빌드 단계 이름

FROM 단계마다 고유한 이름을 사용하세요.

한 빌드 단계의 여러 CMD 지시어

각 빌드 단계에서 의도한 기본 실행 명령이 무엇인지 명확히 하세요.

한 빌드 단계의 여러 ENTRYPOINT 지시어

각 빌드 단계의 실제 진입점과 기본 인자를 명확히 하세요.

여러 원본을 복사하는 COPY의 대상 경로 오류

여러 파일을 COPY할 때는 대상 디렉터리 경로를 /로 끝내세요.

원격 아티팩트 다운로드의 무결성 검증 점검

원격 파일을 사용하기 전에 신뢰할 수 있는 체크섬이나 서명으로 검증하세요.

EXPOSE 포트 번호 범위 점검

유효한 포트 번호로 실제 서비스의 수신 포트를 명시하세요.

숫자로 참조하는 빌드 단계

COPY --from에서 역할이 드러나는 단계 이름을 사용하세요.

상대 경로를 사용하는 WORKDIR 점검

작업 디렉터리의 기준을 절대 경로로 명확히 지정하세요.

파이프 명령에서 pipefail 미설정

파이프 앞부분의 실패도 감지하도록 셸을 구성하세요.