일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 자료구조
- Docker
- C++ gui
- C++ library
- gui
- JUCE
- Nebula
- C++
- LOB
- BOJ
- JUCE library
- 리듬게임
- c++ heap
- go channel
- tour of go
- 알고리즘
- OS
- 공룡책
- 운영체제
- JUCE 튜토리얼
- 코딩
- JUCE라이브러리
- go
- C언어
- 백준
- 연결리스트
- vim-go
- a tour of go
- 프로그래밍
- C++ gui 라이브러리
Archives
- Today
- Total
CafeM0ca
Docker build 이미지 크기 줄이기 본문
반응형
multi stage로 빌드하면 도커 이미지 사이즈가 줄어든다.
도커 파일을 작성할 때 일반 적으로 이런식으로 작성하곤 한다.
FROM golang:1.18.5-alpine3.16
WORKDIR /app
COPY . .
RUN go build -o main main.go
EXPOSE 8080
CMD [ "/app/main" ]
이미지를 설정해주고 현재 프로젝트 디렉토리를 컨테이너에 복사하고 빌드하고 실행한다.
이렇게 build된 dockerfile은 용량이 무지막지하게 큰데 간단한 프로젝트라도 1GB에 육박할 수 있다.
이 보다 더 좋은 방법으로는 multi-stage build 방법이 있다.
https://docs.docker.com/develop/develop-images/multistage-build/
이 방법은 FROM
을 여러개를 사용하여 각기 다른 스테이지를 만들어서 빌드와 실행을 구분한다.
#Build stage
FROM golang:1.18.5-alpine3.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o main main.go
# Run stage
FROM alpine:3.16
WORKDIR /app
COPY --from=builder /app/main .
EXPOSE 8080
CMD [ "/app/main" ]
Build stage에서는 바이너리를 빌드한다. builder의 /app/에는 go로 빌드된 main 바이너리가 존재하는데
이를 Run stage에 바이너리만 복사한다. 그럼 Build stage에서 사용한 소스코드 등 많은 용량이 Run stage에서는 바이너리 하나로만 존재하기 때문에 docker-image 크기를 대폭 줄일 수 있다.
내 경우에는 30배정도 줄었다.
+ alpine이 사이즈가 타이트한 이미지다.
반응형
'Programming' 카테고리의 다른 글
AWS ECR과 github-actions 연동 (0) | 2022.09.16 |
---|---|
[K8S] MacOS error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1" (0) | 2022.09.08 |
[자동화] Appnium (0) | 2020.12.05 |
[정보처리기능사] 시험대비 요약 (0) | 2019.06.12 |
윈도우에서 terminator 터미널 실행하기 (0) | 2018.12.07 |
Comments