初めに
goバイナリを、alpineのDockerイメージの中にポイして、安定して動くようになったので記事にしました。
既にalpineイメージの中でgoバイナリを動かす過程で嵌った記事は幾つかあり、参考にさせて頂くと同時に助かりました。
参考にした記事は、最後に記載しております。
上記に加えてJST時刻設定と定期実行させるためのクーロン設定をDockerfileに追加してみました。
Dockerfile
githubで公開しております。
07行目の箇所は、goのtimeパッケージを使用する際に必要となります。
cron設定は、cron設定ファイルを直接crontabs以下にコピーしています。(詳しくは、上記のgithubのソース参照)
Dockerfile
01 FROM alpine:3.4
02 WORKDIR /app
03
04 # goバイナリを動かす設定
05 RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
06 RUN apk add --no-cache ca-certificates
07 ADD https://github.com/golang/go/raw/master/lib/time/zoneinfo.zip /usr/local/go/8 lib/time/zoneinfo.zip
08
09 # JST時刻設定
10 RUN apk --update add tzdata && \
11 cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
12 apk del tzdata && \
13 rm -rf /var/cache/apk/*
14
15 # バイナリのコピー
16 COPY hello /app
17
18 # cron設定
19 COPY ./cronenv/root /var/spool/cron/crontabs/root
20 CMD ["crond", "-f", "-d", "8"]
参考記事
goバイナリを動かす設定関連
Docker で Go で作ったバイナリを実行するなるべく小さいコンテナを作る
Dockerのbusybox内でgolangのtimeを使ったらエラーになった
JST時刻設定
最後に
AWSのCodePipelineを使用して、上記のようなイメージをビルド・ECRへのPush・EC2へのデプロイをしています。
次回はそれについて書けたらと思います。