Go에서 Docker의 multi-stage build 사용

2754 단어 5dockerfile도커

전제


  • Docker가 설치되어 있습니다

  • 절차



    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
    

    좋은 웹페이지 즐겨찾기