2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker Rails6 + MySQL mac環境構築メモ

Last updated at Posted at 2020-07-12

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を強制再起動

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?