はじめに
Dockerの勉強をするために趣味で開発しているRailsプロジェクトを途中からDockerで立ち上げるようにしました。
その際の手順と感じたことをメモしていきます。
今回はRails newからではなく、もともとあるプロジェクトをDockerで立ち上げていくようにします。
バージョン
- Docker for mac 17.12.0-ce-mac49
- Docker 3
- Ruby 2.4.2
- Rails 5.1.4
Rubyのimageをpull
$ docker pull ruby:2.4.2
Dockerfile
まずはDockerfile
を設定していきます。
railsプロジェクトのルート直下にDockerfile
というファイルを作成します。
今回Dockerfile
でやっていることとしては、ruby:2.4.2
のimageを元にRailsプロジェクトを立ち上げるimageを作成しています。
FROM ruby:2.4.2
RUN mkdir /app
ENV APP_ROOT /app
WORKDIR $APP_ROOT
# 必要なものをインストール
RUN apt-get update
RUN apt-get install -y nodejs mysql-client --no-install-recommends
RUN rm -rf /var/lib/apt/lists/*
# ホスト側のGemfileをコピー
ADD Gemfile $APP_ROOT
ADD Gemfile.lock $APP_ROOT
# bundle install
RUN bundle config --global build.nokogiri --use-system-libraries
RUN bundle config --global jobs 4
RUN bundle install
ADD . $APP_ROOT
# docker runした時に起動するコマンドを設定、ポートは3000を設定
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
- Railsプロジェクトのルートディレクトリで以下を実行してimageを作成します。
docker build -t project_name .
-
-t
オプションをつけることでリポジトリ名をつけることができます -
docker images
を実行してimageが確認できれば成功
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
project_name latest bfdf79815c47 About a minute ago 1.32GB
docker-compose
次にdocker-compose
を作成してコンテナ起動の設定をしていきます
ここでは主に環境変数の設定とボリュームの指定、ポートの設定を行なっています(ちょっとまだ理解しきれていない感じがするので、もっと改善する場所があるかもしれないです..特にボリューム)
version: '3'
services:
app:
build: .
command: bin/rails s -b "0.0.0.0"
env_file: .env # railsの環境変数を.envで記載する場合
ports:
- "3000:3000"
volumes:
- ".:/app"
depends_on:
- db
db:
image: mysql:5.7.10
environment:
MYSQL_ROOT_PASSWORD: password # 本番環境では別ファイルで管理すること
ports:
- "3306:3306"
volumes:
- ./mysql/mysql-data:/var/lib/mysql
volumes:
mysql-data:
- 作成できたらコンテナをビルドします
$ docker-compose build
- 次にコンテナを起動
$ docker-compose up
- DBが作成されていないので作成します(ついでにmigrateも実行)
$ docker-compose run --rm app rake db:create db:migrate
これでブラウザからRailsプロジェクトの動作が確認できるはずです!!!
注意点
以上でDockerの環境はできましたが、自分で調べている際にハマったことがあります
Dockerのバージョンには気をつけること
日本語の記事はほとんど(自分が調べた限りでは)version2で書かれたものでした
なのでdocker-compose.yml
でvolumes_from
やextends
などのコマンドが使えなかったのでハマって時間がかかりました。
まあバージョンの確認しなかった自分が悪いのですが...バージョン確認は基本なのにできていなかった...
あとはDockerに限らずですが、ちゃんと公式を見たほうがいいなと思いました
まとめ
一旦Railsプロジェクトを途中からDockerに載せる手順をずらっと書いてきました、自分自身Dockerに関してはまだまだ勉強中なので何か指摘があればコメントをお願いいたします
参考
https://qiita.com/togana/items/30b22fc39fe6f7a188ec かなり参考になりました