dockerのmulti stage buildを試す

スポンサーリンク

はじめに

前回docker上でgolangを使える環境を作りました。golangの実行環境としては便利ですが、
golangはbuildでコンパイル、クロスコンパイルしてやればgolangの実行環境なんていらないんですよね。

そこで今回はただビルドするパターンとmulti stage buildするパターンの両方を書き残しておきます。前回の続きみたいな感じで書いてます。

ちなみにDocker 17.05以降じゃないと使えないので注意。

参考サイト

multi stage buildについて参考になったサイト様

公式はこっち

multi stage build版

ディレクトリ構成

docker-compose.yaml

前回と同じです。

cloudwatch.go

svc.GetMetricStatistics(params)箇所でerr確認を追加しました。必要になったのでorz

Value: aws.String("i-XXXXXXXXXXXX"),のXXXX部分は自分が使っているEC2のインスタンスIDです。

Dockerfile

FROM golang:1.11.5-stretch AS XYZがgolangをbuildするためのコンテナでXYZと名付けています。XYZは何でもいいです。映画のシティハンターが見たいだけです。

FROM ubuntu:18.04以下がビルドされたcloudwatchを実行するコンテナです。

ca-certificatesをinstallしている理由は後述します。

確認

起動方法などは前回と全く同じなので割愛。

docker-compose up -dで起動します。

起動後、コンテナ内にログインして実行してみます。

lsで確認するとcloudwatch.goではなくビルド後のcloudwatchだけが存在します。ビルド後は./cloudwatchで実行可能です。

ちなみにこのコンテナ内でgoコマンドを打ってもgoがインストールされていないので打てません。

起動しているコンテナは1つだけですが

imageにはビルドに使ったimageがあります。

7分の差はubuntuのコンテナ作成時のRUNコマンドにすごーく時間が掛かっただけです。

docker-go3_golangは103MBしかなく、ビルドしたimageは1GBもあるのがポイント。imageが軽くなるという凄いメリットがある。

ca-certificatesが必要なわけ

Dockerfileからca-certificatesのインストール箇所をコメントアウトで削ります。

この状態でdocker-compose up -dで起動させて./cloudwatchで実行すると

といった感じでエラーを吐きます。ぐぐるとCA証明書がないことが原因とのことでca-certificatesをインストールしました。

終わりに

multi stage buildを試してみました。今後簡単なコードだったらgolangで書いてmulti stage buildして使っていければなと思います(小並感)

関連コンテンツ



シェアする

  • このエントリーをはてなブックマークに追加

フォローする