이미지 보안도 Docker를 통한 컨테이너 배포에서 매우 중요한 요소입니다.
여기서는 Docker 이미지를 어떻게 안전하게 할지 알아보겠습니다.
언제나 믿을 만한 이미지를 사용하는 것이 중요합니다.
Docker Hub나 다른 믿을 수 있는 레지스트리를 이용해 이미지를 가져오는 것이 좋습니다.
만약 다른 사용자의 이미지를 다운받거나 직접 만들어야 한다면 언제나 소스를 검증하고 Dockerfile을 검사하고 제공된 파일들을 확인해서 이미지가 안전하다는 것을 확인해야 합니다.
지속적으로 이미지를 모니터링하고 정기적으로 업데이트 해야합니다.
이는 알려진 보안위협에 대한 노출을 최소화 해줍니다.
최소한의 기본 이미지는 컨테이너화된 애플리케이션을 실행하기 위해 필요한 것들만 가지고 있습니다.
기본 이미지가 최소한의 컴퍼넌트만 가질수록 공격이 들어올 수 있는 방법이 줄어듭니다.
Clair이나 Anchore같은 도구를 이용하여 알려진 위협을 찾기 위해 정규적으로 이미지를 스캔하는 것이 좋습니다.
이 도구들은 이미지와 컨테이너에서 잠재적인 위협을 찾을 수 있습니다.
이렇게 잠재적인 위협을 찾으면 이를 해결한 뒤 이미지를 레지스트리에 저장하거나 배포하면 됩니다.
Docker에는 Docker Content Trust(DCT) 라는 싸인이 존재합니다.
DCT는 디지털 시그니쳐로 이를 사용하여 가져오거나 올리는 이미지가 예상한 이미지이고 전송 중에 변조되지 않았음을 보장합니다.
아래와 같이 설정하면 됩니다.
export DOCKER_CONTENT_TRUST=1
멀티 스테이지 빌드를 이용하면 최종적으로 이미지의 크기와 복잡성을 줄일 수 있습니다.
아래는 Multi-Stage Build의 예시입니다.
# Build stage
FROM node:12-alpine AS build
WORKDIR /app
COPY . .
RUN npm ci --production
# Final stage
FROM node:12-alpine
COPY --from=build /app /app
CMD ["npm", "start"]