Image Size and Security

이정훈·2024년 8월 9일

Docker

목록 보기
15/34

이미지의 사이즈와 보안에 대해 아는 것은 중요합니다.
작은 이미지는 빠른 빌드를 보장하고 이미지를 다운로드 할때 적은 네트워크 오버헤드를 사용합니다.
보안도 중요한데 컨테이너 이미지는 보안 취약점을 가질 수 있기 때문에 보안 취약점을 가진 컨테이너 사용시 보안 위협을 겪게 됩니다.

아래에서 더 자세히 알아봅시다.

Reducing Image Size

  1. Use an appropriate base image
    필요한 것만 포함한 가능한 작은 그리고 경량화된 이미지를 선택하는 것이 좋습니다.
    예를 들어 alpine 버전을 사용하는 것입니다.
FROM node:14-alpine
  1. Run multiple commands in a single 'RUN' statement
    각 RUN 명령어는 새로운 레이어를 만들기 때문에 가능하다면 RUN에 합칠 수 있는 명령어는 다 합치는 것이 좋습니다.
RUN apt-get update && \
    apt-get install -y some-required-package
  1. Remove unnecessary files in the same layer
    불필요한 파일들은 삭제함으로써 최종 이미지 용량을 줄이는 것이 좋습니다.
RUN apt-get update && \
    apt-get install -y some-required-package && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
  1. Use multi-stage builds
    멀티 스테이지를 이용하여 더 작은 이미지를 만드는 것이 좋습니다.
FROM node:14-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM node:14-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY package*.json ./
RUN npm install --production
CMD ["npm", "start"]
  1. Use '.dockerignore' file
    .dockerignore 파일을 이용하면 불필요한 파일들이 이미지에 포함되는 것을 막을 수 있습니다.

Enhancing Security

  1. Keep base images updated
    기본 이미지를 항상 최신으로 유지하는 것이 좋습니다.

  2. Avoid running container as root
    docker는 호스트의 커널을 공유하기 때문에 컨테이너에서 root 권한을 사용하는 것은 보안에 좋지 않습니다.
    그렇기 때문에 유저 계정을 만들어 유저 계정으로 접속하고 컨테이너의 애플리케이션이 실행되게 하는 것이 좋습니다.

RUN addgroup -g 1000 appuser && \
    adduser -u 1000 -G appuser -D appuser
USER appuser
  1. Limit the scope of 'COPY' or 'ADD' instructions
    COPY나 ADD에서 보안에 문제가 없는 파일만 올려야 합니다.
    COPY . . 같이 사용해서 보안상 문제가 되는 파일이 올라가는 일이 없도록 해야합니다.
COPY package*.json ./
COPY src/ src/
  1. Scan images for vulnnrabilities
    Anchore나 Clair을 이용해 이미지를 스캔해 보안상 문제가 있는지 확인한뒤 배포하는 것이 좋습니다.
profile
기록으로 흔적을 남깁니다.

0개의 댓글