랩: 컨테이너 이미지 빌드
랩: 컨테이너 이미지 빌드
기본적인 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