Edited at

AWS ElasticBeanstalk で Docker 動かすときの備忘録

※ はてなブログからこちらへ技術ネタを移動しました

※ 初稿: 2018/07/20

単一コンテナ環境で何回かやってるんですが、dockerコンテナのデプロイ方法には2種類あります。この方法の選択についていつも忘れてしまうので備忘。

方法1: Amazon ECR などに事前に docker build したイメージを push しておいて、ElasticBeanstalk に Dockerrun.aws.json だけを食わせて ECR からpullしてきて起動

方法2: railsのファイルやらDockerfileやらを全部 zip にしてeb deployか何かでアップロードする

普通に考えれば、方法1は可搬性のあるdockerということだし手元で docker build してしまったほうがエラー対処の手戻りが少なかったり、EB上でbuildしなくていいのでEBのUpdating state時間が少なくなって楽なのだが、ある問題が生じる。

問題:

.ebextensions でdocker hostに関する設定のinjectionができない。

したがって(単一コンテナ環境では)awslogs (CloudWatch Logs) へのアプリケーションログのストリーミングを行う手段がない。

※方法1ではEBはDockerrun.aws.json というマニフェストに従って docker image のみをpullするので.ebextensionsが介入するタイミングが無いとかそういうやつ。

ということで、deployプロセスが冗長になりがちだが仕方なく方法2を使うのである。デプロイの時間はもちろん長くなるが、苦渋の選択です。