はじめに
チーム開発において重宝するDocker、Docker-composeを用いると
メンバー間で同じ実行環境をスムーズに用意できます。
今回railsアプリを例に実際にDocker化して他の方が簡単にアプリの実行環境を
用意できるようにしていきます。
手順
まずアプリのコード一式を保存したディレクトリ直下に以下のファイルを
新たに用意してください。
- Dockerfile
- docker-compose.yml
今回アプリをDocker化するにあたって以上の二つのファイルを使っていきます。
DockerfileのみでもDocker化自体は可能です。
ですがdocker-compose.ymlはDocker-composeを導入するためのファイルで
Docker-composeを使用することによってより簡単にDocker化を実現できます。
それでは各ファイルに必要事項を記載していきます。
Dockerfile
まずDockerfileを以下のように記載してください。
FROM ruby:latest
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /rails-docker
ADD Gemfile Gemfile.lock /rails-docker/
RUN bundle install
ADD . /rails-docker
-
FROM ruby:latest
→ベースイメージを指定 -
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
→パッケージリストを更新して必要なパッケージをインストール -
WORKDIR /rails-docker
→コンテナ内での作業ディレクトリを指定 -
ADD Gemfile Gemfile.lock /rails-docker/
→指定したホスト内のファイルをコンテナ内にも作成。 -
RUN bundle install
→Gemfileに記載されたGemをインストール -
ADD . /rails-docker
→アプリのディレクトリ直下のファイルやディレクトリをコンテナに作成
docker-compose.yml
次にdocker-compose.ymlを以下のように記載してください。
version: '3'
services:
db:
image: postgres:12
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/rails-docker
ports:
- "3000:3000"
depends_on:
- db
-
version: '3'
→Docker-composeのバージョンを指定。現状は3で問題なし。 -
services:
→これ以降に処理の内容を記載 -
db:
DB用のコンテナを用意 -
image: postgres:12
バージョン12のPostgresSQLのイメージを用意 -
environment:POSTGRES_PASSWORD: password
→コンテナ内の環境変数を設定 -
web:
→アプリ用のコンテナを用意 -
build: .
→ビルドコンテキストを指定 -
command: bundle exec rails s -p 3000 -b '0.0.0.0'
→コンテナ内で記載したコマンドを実行 -
volumes:- .:/rails-docker
→指定したホストのディレクトリを指定したコンテナのディレクトリへマウントする。ファイルやディレクトリへの変更は共有される。 -
ports:- "3000:3000"
→ホストとコンテナのポート番号を設定 -
depends_on: - db
→コンテナ間の依存関係を設定。今回はDBが起動した後にアプリが起動する。
database.yml
今回DBにPostgreSQLを使用しているのでdatabase.ymlへの一部変更が必要です。
以下のようになります。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
コマンド入力
ファイルへの記載が完了したら最後にコマンドを実行して
コンテナの作成と起動をしていきます。
以下の順でコマンドを入力してください。
イメージ作成
docker-compose build
コンテナ作成、起動
docker-compose up
DB作成
docker-compose run web rails db:create
DB更新
docker-compose run web rails db:create
以上のコマンド入力が完了したらhttp://0.0.0.0:3000
へアクセスしてアプリの起動が成功しているかを確認してください。
最後に
以上、railsアプリをDocker化する手順についての説明になりました。
web開発の現場では必須の知識になりますのでぜひ使ってみてください。