Dockerfile
行番号をふりますが、実際のファイルには左端の5バイト分(数字4桁+スペース)がありません。 行番号をふった Dockerfile 全体はこちら
www.pyのDockerfileと異なる点だけを解説します
コンテナサイズは小さい方がよい
Go言語で作られたバイナリは、そのファイルだけで動作するように作られます(one binary)。 そのためバイナリ作成後は不要なのでビルド環境は削除します。
以下のやり方をすれば47MB大きくなるだけで済みます。 パッケージとしてGo言語ビルド環境をコンテナに入れ、 そのままコンテナに残してしまうと合計でコンテナが500MBほど大きくなります
パッケージは最小限にする
0018 # apt: base system
0019 ARG PKG_BASE="locales tzdata sudo procps"
0020 ARG PKG_MODEL_SPECIFIC="" #
0021 ARG PKG_UTILTIES="" # curl net-tools inetutils-ping bind9-host dnsutils
不要なものは入れない方針です。 PKG_BASEのパッケージだけがベースのイメージに追加インストールされます
www.goのビルド(0039-0049)
\
で次の行に続いているので、0040-0049で一つの行です。
次の処理を行います
- ホストのfiles/var/wwwをコンテナ内の/var/wwwにコピー(0040)
- /var/www/srcディレクトリに移動(0041)
- Go言語をビルドする環境を構築(0042-0043)
- mysqlライブラリをインストール(0044)
- www.goをビルド(0045)
- 環境を廃棄(0045-0049)
0039 # install golang, build www.go and clean build environment
0040 COPY files/var/www /var/www
0041 RUN cd /var/www/src && \
0042 apt-get update && \
0043 apt-get -y install golang git && \
0044 go get github.com/go-sql-driver/mysql && \
0045 go build -o /var/www/libexec/www.go . && \
0046 apt-get -y remove golang git && \
0047 apt-get -y autoremove && \
0048 apt-get clean && \
0049 rm -rf /var/lib/apt/lists/* /root/.cache /root/go