Dockerfile 보안 모범 사례
Dockerfile에 보안 조치를 적용하여 취약점과 공격 표면을 최소화합니다.
Dockerfile 보안 모범 사례은(는) CoddyKit의 무료 Docker & DevOps Fundamentals 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Docker & DevOps Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Docker & DevOps Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
Dockerfile을 안전하게 작성하세요!
Dockerfile 보안 모범 사례에 오신 것을 환영합니다! 안전한 애플리케이션은 안전한 기반에서 시작합니다.
Dockerfile은 단순한 빌드 스크립트가 아니라 애플리케이션 보안을 위한 설계도입니다. 여기서 잘못된 방식을 사용하면 심각한 취약점이 발생할 수 있습니다.
이 단원에서는 Docker 이미지를 강화하고 잠재적인 공격 표면을 최소화하는 핵심 전략을 살펴보겠습니다.

신뢰할 수 있는 기본 이미지로 시작하기
FROM 지시문은 첫 번째 방어선입니다. 항상 Docker Hub와 같은 신뢰할 수 있는 출처에서 공식적으로 제공되고 지속적으로 관리되는 기본 이미지를 선택합니다.
- 공식 이미지: 검증되었으며 정기적으로 업데이트됩니다.
- 구체적인 태그:
latest는 피합니다. 예측 가능성과 안정성을 위해 특정 버전 태그(예:alpine:3.18)를 사용합니다. - 최소 이미지: 'slim' 또는 'alpine' 버전을 선택합니다. 포함된 패키지가 적으므로 잠재적인 취약점도 줄어듭니다.
안전한 기본 이미지 선택하기
최소 구성의 구체적인 기본 이미지를 선택하면 보안을 어떻게 향상할 수 있는지 살펴보겠습니다. 악용될 수 있는 패키지와 도구의 수를 줄일 수 있습니다.
FROM alpine:3.18
# This is better than:
# FROM ubuntu:latest
# FROM python:latest
# Alpine is a minimal Linux distribution,
# making the image smaller and more secure.이미지 크기 최소화하기
이미지에 추가하는 모든 파일, 패키지 또는 종속 항목은 '공격 표면'을 넓힙니다. 포함된 소프트웨어가 적을수록 잠재적인 취약점도 줄어듭니다.
애플리케이션 실행에 절대적으로 필요한 항목만 설치합니다. 더 이상 필요하지 않은 빌드 도구와 임시 파일은 제거합니다.
설치 후 정리하기
패키지를 설치할 때는 항상 패키지 관리자의 캐시를 정리하고 불필요한 파일을 제거합니다. 이렇게 하면 최종 이미지 크기가 줄어들고 정보 유출 가능성도 제거됩니다.
Ubuntu와 같은 Debian 기반 이미지에서는 동일한 RUN 지시문에서 apt-get clean을 사용하고 /var/lib/apt/lists/*를 제거합니다.
FROM debian:stable-slim
RUN apt-get update && \
apt-get install -y --no-install-recommends \
curl \
git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# All in one RUN command to leverage Docker's caching and reduce layers.루트로 실행하지 마세요!
기본적으로 Docker 컨테이너 내부의 프로세스는 root 사용자로 실행됩니다. 이는 심각한 보안 위험입니다!
공격자가 컨테이너를 장악하면 루트 권한을 얻게 되어 컨테이너를 탈출하거나 호스트 시스템을 침해할 수 있습니다.
항상 전용 비루트 사용자를 만들고 USER 지시문을 사용하여 해당 사용자로 전환합니다.
비루트 사용자 설정하기
새 사용자를 만들고 Docker가 이후 명령을 해당 사용자로 실행하도록 지정하는 방법을 알아보겠습니다. 컨테이너가 침해되더라도 발생할 수 있는 피해를 크게 줄일 수 있습니다.
FROM alpine:3.18
# Create a non-root user and group
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Switch to the non-root user
USER appuser
CMD ["echo", "Hello from non-root user!"]Dockerfile에 비밀 정보를 넣지 마세요!
API 키, 데이터베이스 비밀번호, 개인 키와 같은 민감한 정보를 Dockerfile에 직접 하드코딩하거나 이미지에 커밋하지 마세요.
나중에 해당 정보를 삭제하더라도 이미지에 접근할 수 있는 사람이라면 누구나 이러한 비밀 정보를 쉽게 추출할 수 있습니다.
대신 Docker Secrets, 환경 변수(민감하지 않은 데이터에 한함), 실행 시점의 Kubernetes Secrets와 같은 안전한 방법을 사용합니다.
ADD보다 COPY 선호하기
COPY와 ADD 지시문은 모두 파일을 이미지에 복사하지만, 보안과 명확성을 위해 일반적으로 COPY를 선호합니다.
COPY: 로컬 파일이나 디렉터리만 복사합니다. 동작이 간단하고 예측 가능합니다.ADD: URL에서 파일을 가져오고 압축된 보관 파일(tar, gzip)을 자동으로 추출할 수도 있습니다. 이러한 추가 기능은 신뢰할 수 없는 콘텐츠를 다운로드하거나 악성 보관 파일을 추출하는 등의 잠재적인 보안 위험을 초래합니다.
ADD의 고급 기능이 꼭 필요하고 위험을 이해하고 있는 경우가 아니라면 COPY를 사용합니다.
보안 확인!
다음 중 공격 표면을 줄이고 잠재적인 취약점을 최소화하는 데 중요한 Dockerfile 사용 방식은 무엇일까요?
안전한 Dockerfile을 향한 여정
잘하셨습니다! 안전한 컨테이너화의 기반이 되는 Dockerfile 보안 모범 사례를 배웠습니다.
- 신뢰할 수 있는 최소 구성의 기본 이미지로 시작하기: 공식적이고 구체적이며 불필요한 요소가 적은 이미지를 사용합니다.
- 이미지 크기 최소화하기: 필요한 항목만 설치하고 설치 후 정리합니다.
- 비루트 사용자로 실행하기: 권한을 제한하여 침해가 발생했을 때의 영향을 줄입니다.
- 비밀 정보 피하기: 민감한 데이터를 Dockerfile에 하드코딩하지 않습니다.
- `COPY`를 `ADD`보다 선호하기: 더 예측 가능하고 안전한
COPY지시문을 선택합니다.
이러한 방식을 적용하면 컨테이너화된 애플리케이션의 보안 수준을 크게 높일 수 있습니다!
자주 묻는 질문
“Dockerfile 보안 모범 사례” 강의는 무료인가요?
네 — “Dockerfile 보안 모범 사례” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Docker & DevOps Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Docker & DevOps Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
“Dockerfile 보안 모범 사례”에서 뭘 배우나요?
Dockerfile에 보안 조치를 적용하여 취약점과 공격 표면을 최소화합니다. 브라우저에서 직접 실행하는 실습 코드로 Docker & DevOps Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Docker & DevOps Fundamentals을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Docker & DevOps Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Dockerfile 보안 모범 사례” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Docker & DevOps Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Docker & DevOps Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 효율적인 다단계 빌드
- 빌드 캐시 활용
- Dockerfile 보안 모범 사례
- Slim 및 Distroless 기반으로 이미지 크기 줄이기