はじめに
Rails をローカルでお手軽に開発出来る環境を作りたくて情報を整備してみました。
概要
ホストOSの上に、Vagrant で操作する VirtualBox を導入し、その上に Docker / docker-compose が動作する CentOS を用意して、そこで Rails と MySQL が動作するようにします。
システムの全体像
システム構成
このコードは次のようなシステム構成において、Application Server にて実行されることを想定しています。
ソフトウェア・スタック
開発環境は次のようなソフトウェア・スタックです。
これらは以下のバージョン構成で動作確認しています。
項目 | 内容 |
---|---|
VirtualBox | 5.2.22 r126460 (Qt5.6.3 |
Vagrant | Vagrant 2.2.0 |
CentOS | CentOS Linux release 7.6.1810 (Core) |
Docker | Docker version 19.03.1, build 74b1e89 |
docker-compose | docker-compose version 1.17.1, build 6d101fb |
Ruby | 2.5.3 |
Ruby on Rails | Rails 5.2.2 |
bundler | Bundler version 2.0.2 |
MySQL | 5.7 |
手順
ここからが構築手順です。
0. 事前準備
Docker / docker-compose を自動でインストールする vagrant の起動スクリプトを用意してあるので、仮想環境の構築はこれを実行するだけです。
# Vagrant のプラグインをインストールする
vagrant plugin install vagrant-vbguest
vagrant plugin install vagrant-proxyconf
# GitHub から Vagrantfile と provision.sh を取得する
git clone https://github.com/anfangd/docker-on-vagrant-script.git
# 適当に名前を変えて カレントディレクトリ を変更
mv docker-on-vagrant-script centos-7-docker
cd centos-7-docker
# Vagrant の起動する
vagrant up
# 仮想環境へ ssh でアクセスする
vagrant ssh
起動した仮想環境内で、 Docker と docker-compose をコマンド操作できるか確認します。
# docker の動作確認をする
docker run hello-world
# docker のバージョン確認をする
docker --version
Docker version 18.06.1-ce, build e68fc7a
# docker-compose のバージョン確認をする
docker-compose --version
docker-compose version 1.17.1, build 6d101fb
1. 構築用スクリプトの取得
作業用のフォルダを作成し、GitHub からコンテナ構築用のスクリプトを取得します。
# ホストOSと同期しているフォルダへ移動し、作業用フォルダを作成
cd /vagrant
mkdir workspace && cd &_
# docker-compose のスクリプトを取得し、適当なフォルダ名に変更
git clone https://github.com/anfangd/rails-by-docker-compose.git
mv rails-by-docker-compose rails-project
cd rails-project
取得したコードは次のような構成になっています。
tree
├── docker-compose.yml
├── .env
├── mysql
│ ├── Dockerfile
│ ├── conf
│ │ └── etc
│ │ └── my.cnf
│ └── data
└── rails
│── Dockerfile
└── src
│── Gemfile
└── Gemfile.lock
2.初期プロジェクトの作成 と DBアクセス設定
次のコマンドで Rails のプロジェクトを新規作成します。
docker-compose run web rails new . --force --database=mysql --skip-bundle
database.yml
を修正し、 Rails アプリケーションから DBホストへの接続情報を設定します。
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: root
host: db
3.スクリプトを実行してコンテナを起動
次のコマンドを実行して、Dockerコンテナを起動します。
# ビルドする
docker-compose build
# 起動する
docker-compose up -d
4. マイグレーションの実施
Rails を使用してマイグレーションを実行します。
docker-compose exec web rails db:create
5.アクセス確認
次のURL へアクセスし、動作を確認します。
hostname
は適切な値に変更します。
6.後始末
次のコマンドで環境を破棄します。
docker-compose down
参考
docker-compose の基本事項
- docker-compose コマンドまとめ #Qiita
- docker-compose up で tty: trueを付けているのに、commandを実行するとコンテナが終わってしまう - Stack Over Flow
Docker の デフォルト Network 名について
- Compose のネットワーク機能 - Docker-docs-ja
- docker-compose で複数環境を構築するときの設定をなるべく DRY に書く - ikasama over technology
- いい加減docker-composeでlinksを使うのをやめてnetworkでコンテナ間名前解決をする #Qiita