오늘도 한 뼘 더
[TIL] Multi-Stage Build(Dockerfile) 본문
728x90
반응형
# 배경
회사에서 Docker 업무를 하면서 로컬에서 golang 서비스를 Docker로 만드는 걸 진행했는데 잘 되지 않는 문제가 발생을 했고 시니어 분께서 Dockerfile을 봐주시면서 Multi-Stage Build라는 것을 알아보라고 하셨다.
# Multi-Stage Build
- Docker 이미지를 만들 때 Dockerfile을 사용하는데 이때, 이미지를 만드는 방식이 layer를 쌓는 방식이다.
- multi-stage builds는 여러개의 "FROM"을 작성하여 하나의 Dockerfile에서 새로운 빌드 스테이지를 시작할 수 있게끔 한다.
- 필요한 소스들만 COPY를 해서 사용함으로써 도커 이미지의 용량도 줄어드는 효과가 나타난다.
# Multi-Stage Build 적용 전
- 시니어 분의 popit.kr 글과 Docker 홈페이지의 문서를 보고 작성한 multi-stage 적용 전의 Dockerfile
FROM golang:1.15.6 AS builder
WORKDIR /go/src/platform-service
ADD . /go/src/platform-service
RUN go mod download
RUN go install -ldflags '-w -extldflags "-static"'
EXPOSE 9000
CMD ["./platform-service"]
- 도커이미지 용량
# Multi-Stage Build 적용 후
- Dockerfile
FROM golang:1.15.6 AS builder
WORKDIR /go/src/platform-service
COPY . .
# disable cgo
# ENV CGO_ENABLED=0
RUN go mod download
RUN go install -ldflags '-w -extldflags "-static"'
# make application docker image use alpine
FROM alpine:3.10
# using timezone
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN apk add -U tzdata
WORKDIR /go/bin/
# copy config files to image
COPY --from=builder /go/src/platform-service/config/*.json ./config/
# copy execute file to image
COPY --from=builder /go/bin/platform-service .
#EXPOSE 9000
CMD ["./platform-service"]
- 도커이미지 용량
참고자료
https://www.popit.kr/커머스-코드-자산화-개발일지-4-출시/
https://docs.docker.com/develop/develop-images/multistage-build/
728x90
반응형
'DevOps & Infra > TIL(Today I Learned)' 카테고리의 다른 글
[TIL] Error: wkhtmltopdf 사용하여 pdf 생성한 후 한글 깨짐 현상 해결 (0) | 2023.01.28 |
---|---|
[TIL] wkhtmltopdf 패키지 Buildfile 이용하여 설치하기 (0) | 2023.01.19 |
[TIL] 소스맵(Source Map) (0) | 2022.01.06 |
[Issue] Log4j 보안 이슈 확인하기 (0) | 2021.12.14 |
Comments