Go에서 Docker의 multi-stage build 사용
2754 단어 5dockerfile도커
전제
절차
Go 파일 만들기
app.go
라는 파일을 만듭니다.app.go
에 「Hello, world」라고 출력할 뿐의 코드를 쓴다.(호스트 OS에 Go가 설치되어 있지 않아도 )
app.go
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}
Dockerfile 만들기
Go 파일과 동일한 디렉토리에
Dockerfile
를 만듭니다."Go 바이너리를 빌드하는 환경"과 "Go 바이너리를 실행하는 환경"의 정의를 설명한다.
Dockerfile
# 「builder」という名前で Dockerfile 内から参照できるようにする
FROM golang:1.13 AS builder
WORKDIR /root
# 作成した Go ファイルをコピー
COPY . /root
# Linux 用のバイナリをビルドし、WORKDIR に出力
RUN GOOS=linux go build -o app .
# scratch は超軽量なイメージ
FROM scratch
WORKDIR /root
# 「builder」にあるバイナリを WORKDIR にコピー
COPY --from=builder /root/app .
CMD ["./app"]
이미지 빌드 및 컨테이너 시작
Go 파일과 Dockerfile이 있는 디렉토리에서 터미널을 시작하고 이미지를 빌드 & 컨테이너 시작합니다.
terminal
# app という名前でイメージをビルド
docker build -t app .
# app のコンテナを起動( --rm はコンテナ停止時にコンテナを削除するオプション )
docker run --rm app
# app.go の実行結果が出力される
> Hello, world
# app のイメージサイズ ≒ バイナリのサイズ で「Go のバイナリを実行する環境」が実現できたことがわかる
docker images app --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
REPOSITORY TAG SIZE
app latest 2.01MB
Reference
이 문제에 관하여(Go에서 Docker의 multi-stage build 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y-u-t-a/items/9cfd00c0d66819685885텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)