LoginSignup
1
1

More than 3 years have passed since last update.

docker multistage buildとDockerHub

Posted at

背景

Dockerのマルチステージビルド機能とDockerHubへのPushまでのメモ

用意するもの

※ Docker 17.05以上が必要です。

Dockerfile

マルチステージを用いるDockerfileと使わないDockerfileを用意します。
マルチステージビルドについては下記をご参照ください
Use multi-stage builds

ノーマル
FROM golang:1.12.7-alpine
LABEL multi_stage="no"
WORKDIR /app
RUN apk add --no-cache make && \
    rm -rf /var/cache/apk/* && \
    mkdir src
COPY ./src ./src
COPY ./Makefile .
RUN make
ENTRYPOINT ["./main"]
CMD [""]
マルチステージビルド
FROM golang:1.12.7-alpine AS builder
LABEL multi_stage="no"
WORKDIR /app
RUN apk add --no-cache make && \
    rm -rf /var/cache/apk/* && \
    mkdir src
COPY ./src ./src
COPY ./Makefile .
RUN make

FROM busybox
LABEL multi_stage="yes"
WORKDIR /app
COPY --from=builder /app/main .
# COPY --from=0でも前ステージを指定してることになるのでそちらでも可能
COPY ./test.ini .
ENTRYPOINT ["./main"]
CMD [""]

上記をそれぞれビルドします。できあがったイメージはこちらです。
タグはわかりやすいようにつけてます。
353MB => 3MBは優秀ですね。

$ docker image ls --filter 'label=multi_stage=no'
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
ryuichi1208/mumulti_stage_build   nomal               508808fe62ea        45 minutes ago      353MB

$ docker image ls --filter 'label=multi_stage=yes'
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
ryuichi1208/mumulti_stage_build   multi               b5c000ea4c0a        About an hour ago   3.25MB

DockerHubへPush

DockerHubへログインしてpushします。
詳細については下記をご参照ください。
Docker Hub Quickstart

Pushしたものはこちら。
それぞれマルチステージビルドを使ったものと使わなかったイメージです。

スクリーンショット 2019-07-28 21.44.19.png

他ホストからイメージしてRun

$ docker run ryuichi1208/multi_stage_build:multi

$ docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
ryuichi1208/multi_stage_build        multi               27cb320e59ac        2 hours ago         3.25MB
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1