流れ
- Dockerfileを作成
- docker-compose.ymlを作成
- Gemfile,Gemfile.lockを作成
- イメージ・コンテナの作成
- Rails初期設定
- 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
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