LoginSignup
6
5

More than 3 years have passed since last update.

ruby 2.7.0 + Rails 5.2.4 + mysql 5.7.28 でDocker開発環境を構築する備忘録

Posted at

流れ

  1. Dockerfileを作成
  2. docker-compose.ymlを作成
  3. Gemfile,Gemfile.lockを作成
  4. イメージ・コンテナの作成
  5. Rails初期設定
  6. Githubにリモートリポジトリ作成

ディレクトリ構成

application_root/
 - Dockerfile
 - docker-compose.yml
 - Gemfile
 - Gemfile.lock
 - その他Railsアプリケーションファイル群

Dockerfileを作成

application_root下に下記のファイルを作成

# イメージのベースラインにRuby2.7.0を指定
FROM ruby:2.7.0
# Railsに必要なパッケージをインストール
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN gem install bundler
# ルートディレクトリを作成
RUN mkdir /app
# 作業ディレクトリを指定
WORKDIR /app
# ローカルのGemfileとGemfile.lockをコピー
COPY ./Gemfile /app/Gemfile
COPY ./Gemfile.lock /app/Gemfile.lock
# Gemのインストール実行
RUN bundle install
# カレントディレクトリの内容をコピー
COPY . .

docker-compose.ymlを作成

同様に下記のファイルを作成。
DBはmysqlで、ローカルにデータストアを設けて永続化している。

# docker-compose.ymlフォーマットのバージョン指定
version: '3'
services:
  # Railsコンテナ定義
  web:
    # Dockerfileを使用してイメージをビルド
    build: .
    # ポート3000が来たらrailsサーバーが応答
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    # ローカルのsrcをコンテナにマウント
    volumes:
      - .:/app
    ports:
      - 3000:3000
    # dbコンテナが先に起動するよう設定
    depends_on:
      - mysql
    tty: true
    stdin_open: true
  # MySQLコンテナ定義
  mysql:
    # mysqlを使用してコンテナ作成
    image: mysql:5.7.28
    volumes:
      # データストアからマウント
      - ./tmp/mysql:/var/lib/mysql
    # コンテナ内の環境変数を定義
    environment:
      # mysqlのルートユーザーのパスワード設定
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
    restart: always

Gemfile,Gemfile.lockの作成

以下のコマンドでGemfileを作成。

bundle init

下記のように編集。

# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails", "~> 5.2.4"

Gemfile.lockは空で作成しておく。

touch Gemfile.lock

イメージ・コンテナの作成

Railsプロジェクトを作成する。

docker-compose run web rails new . --force --database=mysql

Dockerイメージを作成する。(で合っているよね?)

docker-compose build

作成されたイメージを確認できる。
コンテナはまだない。

# イメージのリスト
docker image list

# 動作しているコンテナ一覧
docker ps

ここまでがうまくいかなかった時は削除してやり直す。

docker rm -f [container_id]
docker rmi -f [image_id]

いよいよコンテナを立ち上げる。
-dをつけるとデーモン実行できるが、ログを見たいのでそのまま実行。

docker-compose up

Rails初期設定

config/database.ymlのpassword, hostを編集する。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password # docker-compose.ymlに記載したパスワード
  host: mysql # docker-compose.ymlに記載したホスト名

コンテナ内に入って、DBを作成する。

docker exec -it [container_name] bash
rake db:create

下記URLで動作が確認できる。
http://localhost:3000

スクリーンショット 2020-01-18 0.33.27.png

Github設定(ついでに)

Githubアカウントは作ってある前提で・・・

まずはSSHキーを作成。もうある場合は不要。
内容をGithubの設定から、SSH keysにアップロードする。

ssh-keygen -t rsa
cat .ssh/id_rsa.pub

あとはリモートリポジトリのSSHアドレスを設定してPush。

# ユーザー名の設定
git config --global user.name [ユーザー名]

# リモートリポジトリの設定
git remote add origin git@github.com:xxxxxxxx/xxxxxxxxx.git

# アプリケーションの初期状態をPush
git add -A
git commit -m "create application"
git push origin master
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5