フロントエンドやマークアップ担当の人が中々バックエンドが動く環境作ってくれなかったので導入しました。環境作ってくれないと確認やら何やらでいちいちこっちに聞きに来るので、時間が無くなったりフロントエンドのコーディングまでついでにやらきゃならなかったりするので。
##前提
dockerについての基本的なことは省略します。
ちなみに複数環境扱うような受託開発系エンジニアはdocker使うとものすごい楽です。
自分はrailsやlaravelやnodejsやらを各プロジェクトで切り替えてました。プロジェクト毎にmysqlやpostgres切り替えたり、同じlaravelのプロジェクトでもphpのバージョン違ったりmysqlのバージョン違ったりして死にそうになります。
phpenvやrbenvなどで管理できるとは言っても限界があったので。。。
それがdocker-compose使うと、compose用の設定ファイルがあるところでdocker-compose upするだけでよくなる。
涙が出ました。
##やりたいこと
既存のRailsプロジェクトをdocker-composeで動くようにしたい。
そのための設定メモ。
laravelにはlaradockというのがあったんですが、railsには良さげなのがなかったです。
必要で色々調べたんですが、(半年くらい前は)中々日本語の記事が無かったので各項目が何を指すか残しておこうと思います。
##ディレクトリ構成
-myproject/ #プロジェクトのルートディレクトリ
- docker-compose.yml
- Dockerfile-rails
- Gemfile
- Gemfile.lock
~~~
railsのソースコード
#####・docker-compose.yml
composeでまとめてコンテナを起動するための設定ファイル
#####・Dockerfile-rails
rails用イメージ作成に使う
##Dockerfileを作る
FROM ruby:2.3.1
RUN apt-get update && \
apt-get install -y mysql-client nodejs --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
RUN mkdir /myproject
WORKDIR /myproject
ADD Gemfile /myproject/Gemfile
ADD Gemfile.lock /myproject/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD . /myproject
railsのイメージを作ってます。
railsのバージョン変えたい場合は
FROM ruby:2.3.1
のバージョンを変更。
RUN apt-get〜
は作成するrails用イメージに必要なものをインストール。他に必要があればここに書き足す。
RUN mkdir /myproject
以下はディレクトリを作成した後
同階層にあるGemfileをdockerのイメージに移動。
イメージにGemをインストールしている。
##docker-composeの設定
設定ファイルの中身。各項目の説明はコメントで
#docker-composeのバージョン
version: '2'
#ここにdocker-composeコマンドで起動するコンテナとその設定を記載する
services:
#コンテナ名
db:
#以下、コンテナ内で使用する設定
#使用するdocker image
image: mysql:5.6
#環境変数
environment:
- MYSQL_DATABASE=xxxxx
- MYSQL_USER= xxxxx
- MYSQL_PASSWORD= xxxxx
- MYSQL_ROOT_PASSWORD= xxxxx
#コンテナがマウントするディレクトリ
#mysqlのファイルをローカルディレクトリに保存するようにしている
#これを記載しないとコンテナを落とす度にデータが初期化されるので注意
volumes:
- ./mysql/volumes:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
#使用するポート番号
ports:
- "3306:3306"
#コンテナ名(rails用のコンテナ)
application:
#既存のdocker imageではなく、dockerfileを元にbuildする
build:
context: .
#imageをbuildする際に使用するdockerfile
dockerfile: Dockerfile-rails
environment:
RAILS_ENV: development
#起動時に実行するコマンド
#ここでは起動時にrailsサーバーを立ち上げている
command: bundle exec rails s -p 3000 -b '0.0.0.0'
#dockerと同階層に既存のrailsプロジェクトが展開されているため、それを参照する設定
volumes:
- .:/application
ports:
- "3000:3000"
#このコンテナが依存するコンテナ
#railsでmysqlを使用するためdbコンテナを参照する
depends_on:
- db
##起動する
docker-compose.ymlがあるところで
docker-compose up -d
##終了する
docker-compose.ymlがあるところで
docker-compose down
##終わり
以上、各種設定項目のメモでした。
他の環境でもymlの項目の値や、dockerfileをいじれば対応できそう。