概要
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
で削除することができます。