의존 이미지 빌드하기
의존 이미지 빌드하기 (Build dependent images)
push/pull 시간과 이미지 무게를 줄이기 위해, Compose 애플리케이션의 일반적인 관행은 서비스들이 베이스 레이어를 최대한 공유하게 하는 것이에요. 보통 모든 서비스에 같은 운영체제 베이스 이미지를 선택해요. 이미지들이 같은 시스템 패키지를 공유할 때는 이미지 레이어를 공유하는 방식으로 한 걸음 더 나아갈 수도 있어요. 해결해야 할 과제는 모든 서비스에서 똑같은 Dockerfile 명령을 반복하지 않게 하는 거예요.
출처: 문서
본문
멀티스테이지 Dockerfile (Multi-stage Dockerfile)
권장 접근 방식은 공유 선언을 단일 Dockerfile에 묶고, 멀티스테이지 기능을 사용해 서비스 이미지가 이 공유 선언에서 빌드되게 하는 거예요.
Dockerfile:
FROM alpine as base
RUN /bin/sh -c apk add --update --no-cache openssl
FROM base as service_a
# build service a
...
FROM base as service_b
# build service b
...
Compose 파일:
services:
a:
build:
target: service_a
b:
build:
target: service_b
target으로 각 서비스가 멀티스테이지 Dockerfile의 어느 스테이지를 빌드할지 지정해요. 공통 base 스테이지가 레이어를 공유하므로 동일한 명령을 반복할 필요가 없어요.
다른 서비스의 이미지를 베이스 이미지로 사용하기 (Use another service's image as the base image)
인기 있는 패턴은 다른 서비스의 이미지를 베이스 이미지로 재사용하는 거예요. 이렇게 하면 이미지 레이어 공유 효과를 더 얻을 수 있어요. (구체적인 Compose 구성 예시는 원본 문서 참고)