概要

ElasticBeanstalk で Docker を使って Rails6 のデプロイを試してみす。
今回は単一コンテナの DockerDocker を使用します。

事前に必要なのはもちろん Docker と ElasticBeanstalk のデプロイに使う EB CLI です。

Rails プロジェクトを作成する

Rails アプリケーションの作成には Docker を使用します。
コンテナ内へログインし、必要なファイルを生成します。

docker run -it --rm -v ${PWD}:/usr/src/app ruby:2.6 bash

以下のコマンドをコンテナ内で実行します。

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get update -yqq && apt-get install -yqq yarn

gem install rails
cd /usr/src/app
rails new myproject

これで ホスト側にも myproject 以下にファイルが生成されました。
コンテナから抜けて config/environments/development.rb を開いたら、Rails.application.configureブロック内に次の一文の追加します。

config.hosts.clear

Rails アプリケーションのコンテナ化

次に Dockerfile を作成します。

FROM ruby:2.6

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -yqq && apt-get install -yqq yarn

WORKDIR /usr/src/app
COPY Gemfile /usr/src/app/Gemfile
COPY Gemfile.lock /usr/src/app/Gemfile.lock
RUN bundle install
COPY . /usr/src/app
EXPOSE 3000

CMD ["bin/rails", "s", "-p", "3000", "-b", "0.0.0.0"]

Docker イメージをビルドして Docker Hub へプッシュします。

~/myproject$ docker build -t docker-username/beanstalk-rails:latest .
~/myproject$ docker push docker-username/beanstalk-rails:latest

Docker イメージを ElasticBeanstalk にデプロイ

新しいフォルダを作成し、Dockerrun.aws.jsonファイルを作成します。

~/eb-docker/Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "username/beanstalk-rails",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "3000"
    }
  ]
}

EB CLI を使用して、ElasticBeanstalk にデプロイするリポジトリの設定をします。

~/eb-docker$ eb init -p docker myproject

デプロイには次のコマンドを実行します。

~/eb-docker$ eb create myproject-env

環境構築が終わればeb openコマンドを使用するとウェブブラウザで表示されます。

今回生成した AWS のリソースはeb terminate myproject-envで削除することができます。