フロントエンドやマークアップ担当の人が中々バックエンドが動く環境作ってくれなかったので導入しました。環境作ってくれないと確認やら何やらでいちいちこっちに聞きに来るので、時間が無くなったりフロントエンドのコーディングまでついでにやらきゃならなかったりするので。

前提

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.yml
#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をいじれば対応できそう。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.