Docker を使ってのmac上での Rails6 , MySQL 5.7 環境構築メモ
https://www.docker.com/
公式ページからmac用のdockerをインストールしておくこと
ファイルの準備
・docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: root
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
ports:
- "3306:3306"
volumes:
# 初期データを投入するSQLが格納されているdir
- ./db/mysql_init:/docker-entrypoint-initdb.d
# 永続化するときにマウントするdir
- ./db/mysql_data:/var/lib/mysql
web:
build: .
command: rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app_name
ports:
- "3000:3000"
links:
- db
・Dockerfile
FROM ruby:2.7.1
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
# 必要なパッケージのインストール
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs yarn
# 作業ディレクトリの作成、設定
RUN mkdir /app_name
##作業ディレクトリ名をAPP_ROOTに割り当て 以下$APP_ROOTで参照
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
# ホスト側(ローカル)のGemfileを追加する
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
# Gemfileのbundle install
RUN bundle install
ADD . $APP_ROOT
# おまじない
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
・Gemfile
source 'https://rubygems.org'
gem 'rails', '6.0.3'
・Gemfile.lock(空のファイル)
・entrypoint.sh
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /app_name/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
「app_name」を間違えないように 本当は環境編集から取得するのが良さそう
mysql, rails のインストール
docker-compose run web rails new . --skip-action-mailer --skip-active-storage --skip-action-cable -d mysql
起動と確認
database.ymlの修正
database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: db # docker-compose.ymlで定義したMySQLのサービス名
DB初期化
docker-compose run web rake db:create
起動
docker-compose up web
エラーが出たので再度コマンド実行
docker-compose up web
docker_rails6_db_1 is up-to-date
Creating docker_rails6_web_1 ... done
Attaching to docker_rails6_web_1
web_1 | => Booting Puma
web_1 | => Rails 6.0.3.2 application starting in development
web_1 | => Run `rails server --help` for more startup options
web_1 | Exiting
web_1 | /usr/local/bundle/gems/webpacker-4.2.2/lib/webpacker/configuration.rb:95:in `rescue in load': Webpacker configuration file not found /app_name/config/webpacker.yml. Please run rails webpacker:install
Error: No such file or directory @ rb_sysopen - /app_name/config/webpacker.yml (RuntimeError)
メッッセージの通りコマンド実行
docker-compose run web rails webpacker:install
# 略
Webpacker successfully installed 🎉 🍰
再度実行
docker-compose up web
http://localhost:3000/
でいつもの画面で見れればOK
rails コマンドの実行
コンソールをもう1つ立ち上げてrailsのコマンドが実行できることを確認しておく
docker-compose run [サービス名] [railsコマンド] の書式で実行
docker-compose run web rails g controller home index
http://localhost:3000/home/index
で作成した画面にアクセスできればOK
docker 停止
docker-compose down
コンテナの中に入ってコマンドを実行したい場合
docker container ls
で実行中のコンテナ名を確認後
docker exec -i -t [コンテナ名] bash
隠しファイルが見れない場合は
.ruby-version
とか確認で来ていない場合はこのコマンドを実行
defaults write com.apple.finder AppleShowAllFiles TRUE
Finderを強制再起動