概要
Railsプロジェクトを作成する際にDocker環境があるのにわざわざローカル環境にRubyを入れて…は効率が悪すぎるので、Rubyコンテナを使用してRailsプロジェクトを作成しました。
忘備録に手順をまとめたので同じようにRailsプロジェクトを作成したい方の助けになればいいと思います。
環境
- macOS Mojave 10.14
- Docker version 18.09.2, build 6247962
rubyコンテナの取得
DockerHubよりRubyイメージを取得
$ docker pull ruby:2.6.3
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ruby 2.6.3 f1c13927d193 13 days ago 870MB
Gemfileの生成
Rubyイメージからコンテナを作成し、Gemfileを生成する。
// コンテナの起動
$ docker run --rm -v `pwd`:/myapp -w /myapp -it ruby:2.6.3 bash
// オプション
--rm: 実行後のコンテナを削除
-v: 共有ディレクトリの設定
-w: ワーキングディレクトリの設定
-it: コンテナをフォアグラウンドで実行
// Gemfileの生成
root@a1eeb5367697:/myapp# bundle init
Writing new Gemfile to /myapp/Gemfile
Gemfileの編集
Gemfileを編集し、Railsをインストールするように変更する。
- # gem "rails"
+ gem "rails"
Dockerfile、docker-compose.ymlの作成
コンテナを作成するDockerfileとdocker-compose.ymlを作成する。
各ファイルは下記のようにディレクトリを作成し、配置する。
ディレクトリ構成
├ docker-compose.yml
└ docker
├ mysql
│ ├ volumes ← DB永続化用ディレクトリ
│ └ password.env
└ rails
└ Dockerfile
ファイル内容
FROM ruby:2.6.3
ENV LANG C.UTF-8
RUN set -x && \
: "前提パッケージのインストール" && \
apt-get update -qq && \
apt-get install -y \
build-essential \
mysql-client \
nodejs
RUN set -x && \
: "パッケージのインストール" && \
gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /myapp
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
version: '3'
services:
db:
image: mysql:5.7.26
ports:
- "3306:3306"
volumes:
- ./docker/mysql/volumes:/var/lib/mysql
env_file: ./docker/mysql/password.env
web:
build:
context: .
dockerfile: ./docker/rails/Dockerfile
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- "3000:3000"
volumes:
- .:/myapp
environment:
RAILS_ENV: development
env_file: ./docker/mysql/password.env
depends_on:
- db
DBのパスワードを設定
MYSQL_ROOT_PASSWORD=password
Railsプロジェクトの生成
Dockerfile、docker-compose.ymlで定義したコンテナのビルドを行い、コンテナにログインする。
// コンテナビルド
$ docker-compose build
// コンテナにログイン
$ docker-compose up -d
$ docker-compose exec web bash
// オプション
-d: バックグラウンド実行
// railsプロジェクトの生成
root@477e08f00455:/var/www/CleanManager# rails new . -d mysql -BT
// オプション
-d: DBをmysqlに設定
-B: bundle installを省略
-T: テストファイルの作成を省略
// パッケージのインストール
root@477e08f00455:/var/www/CleanManager# bundle install
railsアプリの起動
コンテナの再起動を行う。
docker-compose.ymlにビルドインサーバを起動するコマンドを記述しているため、別途起動するコマンドを実行する必要はない。
再起動後、ブラウザで http://localhost:3000 にアクセスし起動していることを確認する。
root@477e08f00455:/var/www/CleanManager# exit
$ docker-compose down
$ docker-compose up -d
まとめ
Docker初心者だったので、よくわからないことがありましたが、なんとか作成することができました。
DBをMySQLからPostgreSQLに変更したかったのですが、PostgreSQLコンテナが起動直後に落ちてしまったのでMySQLで妥協しました。
今後も原因を探して判明しだい、再度記事にしたいと思います。
間違い等ありましたら、コメントから修正お願いします。