昨今の技術トレンドとして間違いなく上位に入るであろうDockerですが、実際に外部に公開するDocker環境をどのように構築すべきか考えたときに自前でホストを持つのか、それともクラウド上に展開するのか等、色々な選択肢があるかと思います。

今回はその中の選択肢の一つとして、AWS Elastic Beanstalkを使用して、AWS上にDocker環境を構築してみます。

1.AWS Elastic Beanstalkとは?

AWS Elastic Beanstalk は、様々な言語を使用して開発されたウェブアプリケーションやサービスを、コードのみAWS上にアップロードすることで、アプリケーションの実行環境を用意してくれるサービスです。2020/06現在で以下の言語がサポートされています。

  • Java
  • .Net
  • PHP
  • Node.js
  • Python
  • Ruby
  • Go

あくまでも課金対象はアップロードしたコードを実行するためのリソースのみであり、Elastic Beanstalk自体では課金は発生しません。

2.Dockerfileの準備

Elastik Beanstalk上でDockerを実行するには以下の2通りの方法があります。

  1. Dockerfileを使用して、Dockerイメージのビルド~デプロイまで実施する
  2. Dockerrun.aws.jsonを使用して、リポジトリ上のDockerイメージをデプロイのみ実施する

今回は1の方法でDockerの実行までを行います。使用したDockerfileは以下の通り。

FROM ubuntu:12.04  

RUN apt-get update
RUN apt-get install -y nginx zip curl
 
RUN echo “daemon off;” >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master

RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip  

EXPOSE 80  

CMD [“/usr/sbin/nginx”, “-c”, “/etc/nginx/nginx.conf”]
参考:https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/single-container-docker-configuration.html

3.Dockerfileのアップロード

次に、作成したDockerfileを実際にアップロードしていきます。
①Elastic Beanstalkの画面から、[Create Application]をクリックします。

②アプリケーション名を入力します。

③プラットフォームはDockerを指定します。

④コードのアップロードから、先ほどのDockerfileを選択し、[アプリケーションの作成]をクリックします。

⑤ログ画面が表示された後、以下の画面に遷移し、ヘルスが[OK]になっていればデプロイは完了です。

試しに画面上部に表示されているURLにアクセスします。

正常に画面が表示され、デプロイしたDockerコンテナ上のウェブサーバにアクセスできることが確認できました。

4.おわりに

今回はDockerコンテナをElastic Beanstalk上にデプロイしてみました。
上記の手順を見ていただくとわかるようにDockerfile、もしくはDockerrun.aws.jsonをアップロードするだけで簡単にウェブサーバ環境を構築することができました。
またElastic Beanstalkはフルマネージド型サービスなので、こちら側で自動スケーリングや負荷分散を設定しなくてよいのも非常に簡単で分かりやすいですね!
Dockerを使用して外部に公開する環境を作らないといけない、という場合はElastic Beanstalkの採用は有力な候補として考えられると思います。