랩: 컨테이너 이미지 빌드

랩: 컨테이너 이미지 빌드

기본적인 Dockerfile을 운영 환경에 적합한 이미지로 바꿔보는 실습 랩이에요. 레이어 캐싱, 멀티스테이지 빌드, .dockerignore, 비루트 사용자, 베이스 이미지 선택, 빌드 시크릿을 마스터해볼게요.

출처: 문서

본문

동작은 하지만 어설픈(naïve) Dockerfile에서 시작해 점진적으로 프로덕션 수준의 이미지로 개선해볼게요. 각 섹션은 한 가지 기법을 소개하면서 실제 Python Flask 앱에 적용하므로, 그 효과를 직접 확인할 수 있어요.

랩 시작하기

랩스페이스를 시작해볼게요:

$ docker compose -p labspace -f oci://dockersamples/labspace-building-images up -d

브라우저에서 http://localhost:3030 을 열어주세요.

실습을 마치면 랩스페이스를 정리해요:

$ docker compose -p labspace down

배우게 될 내용

이 Labspace를 마치면 다음과 같은 것들을 완료하게 돼요:

  • 이미지의 레이어 히스토리를 읽고 레이어 정리 함정을 이해하기
  • 빠르고 캐시 효율적인 증분 빌드를 위해 Dockerfile을 재구성하기
  • .dockerignore 파일을 작성하고 비루트 사용자로 컨테이너 실행하기
  • 멀티스테이지 빌드를 사용해 빌드 게이트로 테스트를 실행하고 이미지 크기를 크게 줄이기
  • Docker Hardened Images를 포함해 운영 환경에 적합한 베이스 이미지 선택하기
  • --mount=type=secret 으로 빌드 시점에 시크릿을 안전하게 주입하기

모듈

# 모듈 설명
1 Welcome & Your First Build 샘플 앱 탐색 및 초기 이미지 빌드
2 Understanding Image Layers docker history 로 레이어 검사 및 레이어 정리 함정 확인
3 Dockerfile Best Practices 캐시 순서 수정, .dockerignore 추가, 비루트 사용자 전환
4 Multi-Stage Builds 빌드 게이트로 테스트 실행 및 프로덕션 스테이지에 슬림 베이스 사용
5 Choosing a Base Image slim, Alpine, Docker Hardened Images 비교
6 Build Secrets ARG 가 시크릿을 누출하는 이유와 --mount=type=secret 의 안전한 사용
7 Wrap-up 완전한 모범 사례 체크리스트 검토 및 다음 단계

더 알아보기 (Learn more)

  • Dockerfile 모범 사례
  • 멀티스테이지 빌드
  • Docker Hardened Images