Docker 이미지 최적화

중급 Docker

Mike Metzger

Data Engineering Consultant

Docker 이미지 설명

  • Docker 이미지는 컨테이너의 기반입니다
  • 컨테이너 인스턴스에 처음 제공되는 모든 내용을 담습니다
중급 Docker

Docker 이미지 우려사항

  • 필요한 구성요소를 전부 이미지에 넣고 싶어집니다
  • 크기가 커져 비효율적
  • 의존성으로 보안/업데이트가 어려움
  • 공간/대역폭을 낭비하며 컨테이너 결합이 어려움
중급 Docker

Docker 이미지 권장사항

  • 컨테이너를 필요한 최소 단위로 분리
  • 큰 단일 이미지보다 나중에 여러 컨테이너 조합이 쉬움
  • 마치
    • 재사용 가능한 구성요소로 빌드하는 것
    • 매번 처음부터 빌드하는 것과 대비
  • 특정 소프트웨어 업데이트는 해당 이미지를 쓰는 컨테이너만 영향
  • 크기 최적화로 사용·배포가 훨씬 쉬움
중급 Docker

Docker 이미지 분해 예시

  • 다음 소프트웨어를 쓰는 데이터 엔지니어링 프로젝트를 가정합시다:

    • Postgresql 데이터베이스
    • Python ETL 소프트웨어
    • 웹 서버 소프트웨어
  • 단일 이미지를 쓸 수도 있으나, ETL이나 웹 서버 설정이 바뀔 때마다 이미지를 다시 업데이트해야 합니다.

  • 웹 서버를 하나 더 추가해야 하면 어떻게 될까요?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
중급 Docker

최소화된 컨테이너 예시

  • Docker로 더 나은 선택지
  • 각 기능을 별도 컨테이너로 분리
    • Postgresql 데이터베이스 컨테이너
    • Python ETL 구성요소
    • 웹 서버
  • 용도에 맞게 최적 구성 가능, 필요 시 구성요소 추가/제거 가능
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
중급 Docker

이미지 크기 확인

  • docker images 사용
  • 개별 이미지 정보와 크기 확인
  • 심화 옵션은 뒤에서 다룸

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
중급 Docker

연습해 봅시다!

중급 Docker

Preparing Video For Download...