Server Build Exercises on AWS (Amazon Web Services) 2022 edition

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
Last updated on 12 Dec 2021
Published on 12 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.