1.はじめに
これからwebアプリをdockerとdocker composeでwebアプリをdocker化する方法をについて紹介します。今回はGitHabにあるtemplateを使ったdocker化の方法を見ていきましょう。
大まかな流れは以下になります。
- rails_docker_tempateリポジトリ(https://github.com/ihatov08/rails7_docker_template)を使ってリポジトリを作る。
- git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORYコマンドを実行してローカルクローンを作成する。
- Dockerfileとdocker-compose.ymlを作成する
- Dockerfile、docker-compose.yml、database.ymlを編集する
- docker-compose upを実行後、別のターミナルで、docker-compose run web rake db:migrateを実行する。
- Rails上でアプリが起動する
この手順でdocker化をしていきます。
2.git cloneしてみよう!
git cloneすることで既存のrailsアプリを自分のローカルリポジトリに持ってくることができます。やり方はすごく簡単です。rails_docker_tempateに移動して
Use this template
を選択して Create a new repository
を押してください。
すると、リポジトリの作成画面が出てくるのでRepository name*
のところに名前を入力してリポジトリを作成してください。
作成したらリポジトリに移動してcodeを押してHTTPSのところのURLをコピーします。そして、ターミナルに移動してgit clone と入力してその後にURLを貼り付けます(このように、[git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY]になっていればOK!)
実行するとローカルリポジトリにtemplateがクローンされます。
rails-dockerリポジトリに移動してlsコマンドで全てファイルがクローンされていれば成功です。
3.必要なファイルを作成して編集しよう!
まず、touchコマンドでDockerfileとdocker-compose.ymlを作成します。そして、Dockerfileの内容を以下のように編集します。
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /rails-docker
WORKDIR /rails-docker
COPY Gemfile Gemfile.lock /rails-docker/
RUN bundle install
ADD . /rails-docker
Dockerfileを書くときに気をつけることはrubyのバージョンです。
バージョンが古いと上手くdocker-imageが作られずにコンテナが起動できないといったことが起きるので注意が必要です。
次にDocker-compose.ymlの編集です。
services:
db:
image: postgres:12
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/rails-docker
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
tty: true
stdin_open: true
ports:
- "3000:3000"
depends_on:
- db
ここで気をつけることは、dbのeniroment
に- POSTGRES_PASSWORD=postgres
を追加してパスワードを指定することです。Web側だけ指定していてもエラーが出るので両方に指定しましょう。
次にdatabase.ymlの編集です。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: postgres
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: postgres
test:
<<: *default
database: postgres
production:
<<: *default
database: postgres
username: rails-docker
password: <%= ENV["RAILSDOCKER_DATABASE_PASSWORD"] %>
ここで気をつけることはデータベースの接続設定を追加することとデータベースの名前の設定です。データベースの接続設定を追加しないとアプリが動きません。
また、データベースの名前を一致させることでdocker-compose up
をするとデータベースが作られます。ここでデータベースができていなかった場合はlocalhost:3000の画面にエラーが出てcreate
ボタンが表示されます。(docker-compose up
コマンドを実行するとlocalhost:3000にアクセスできます。)
ボタンを押すとデータベースは作成されますが、docker-compose up を実行した段階ではデータベースは作成されていません。
データベースを作成するには、名前を一致させることが必要です。
4.rails上でwebアプリを起動させよう!
まず、docker-compose upコマンドをターミナルで実行します。検索の欄にlocalhost:3000と入力します。すると
になると思いますが、この後にターミナルを別で開いて、docker-compose run web rake db:migrate
を実行すると
taskの作成画面が開きます。
編集や削除も簡単にできるので実際に操作して体験してみてください!