← 아티클 목록

도커 이미지 보안 기초 — 안전한 이미지 만들기

2028-09-18#docker#보안#이미지

도커 이미지는 한번 만들어 여러 곳에 배포되므로, 이미지에 숨은 취약점 하나가 모든 컨테이너로 퍼집니다. 그런데 많은 이미지가 불필요하게 크고, 루트 권한으로 돌고, 비밀번호가 박혀 있는 채로 배포됩니다. 도커 이미지 보안의 기초는 거창한 도구가 아니라 공격 표면을 줄이는 몇 가지 습관에서 시작합니다.

핵심 원칙 네 가지

이미지 보안은 "이미지에 무엇을 넣고, 무엇으로 실행하느냐"의 문제입니다. 들어가는 것이 적을수록, 권한이 낮을수록 안전합니다.

원칙이유방법
작은 베이스 이미지패키지가 적을수록 취약점도 적음slim·alpine·distroless
비루트 유저 실행컨테이너 탈출 시 피해 축소USER 지시어
시크릿 미포함레이어에 남으면 추출 가능빌드 시크릿·런타임 주입
정기 취약점 스캔새 CVE가 계속 나옴docker scout·Trivy

비루트 유저로 실행하기

기본적으로 컨테이너는 루트로 돌아갑니다. 취약점으로 컨테이너가 뚫렸을 때 루트면 피해가 훨씬 커지므로, 전용 유저를 만들어 권한을 낮춥니다.

Dockerfile
FROM node:20-slim
WORKDIR /app
COPY --chown=node:node . .
RUN npm ci --omit=dev
USER node                # 이 줄 이후로는 루트가 아닌 node 유저로 실행
CMD ["node", "server.js"]

USER node 한 줄이 컨테이너의 기본 권한을 낮춥니다. 베이스 이미지에 이미 있는 node 같은 비특권 유저를 활용하면 됩니다.

취약점 스캔하기

이미지를 빌드하거나 받아 온 뒤, 알려진 취약점(CVE)이 있는지 스캔하는 것이 기본입니다.

로컬 터미널
docker scout cves myapp:latest
docker scout quickview myapp:latest
trivy image myapp:latest

스캔 결과에서 Critical·High 등급이 보이면 베이스 이미지를 최신 패치 버전으로 올리거나, 더 작은 이미지로 바꾸는 것이 가장 빠른 대응입니다. 또한 .dockerignore.env·.git 같은 민감 파일이 이미지에 들어가지 않도록 막아야 합니다.

요점 정리

  • 보안은 공격 표면을 줄이는 데서 시작한다 — 작은 베이스 이미지를 쓴다.
  • USER 지시어로 비루트 유저를 지정해 탈취 시 피해를 줄인다.
  • 시크릿은 이미지 레이어에 넣지 말고 빌드 시크릿·런타임 주입으로 처리한다.
  • docker scout·Trivy로 정기적으로 취약점을 스캔하고 베이스를 갱신한다.

작은 이미지 만들기부터 비루트 실행, 취약점 스캔까지 직접 해 보는 실습은 도커 트랙에서 할 수 있습니다 — 회원가입 없이 무료로.