LoginSignup
9
6

More than 3 years have passed since last update.

【Docker環境構築/Rails6~,MySQL】ローカル環境で作成中の既存アプリをDocker環境に移行する手順

Last updated at Posted at 2020-08-17

はじめまして、こんにちは!
ローカル環境で作成中の既存アプリケーションをDocker環境に移行する手順について、私自身が実施した内容です。初学者ですが頑張って環境構築しましたので、ふり返りのためにも記録しておきたいと思います!

環境によっては手順どおりには行かないと思います。
またプログラミング初学者で勉強の為に試行錯誤して実施しておりますので、誤っている事、不要なことがあるかもしれません。その際はご指摘頂けるとありがたいです。

環境

  • Ruby 2.6.5
  • Rails 6.0.0
  • MySQL 5.6

事前準備

  • Docker Desctopをインストール
  • Dokerデーモンが起動している状態

Docker Desctopは「Stable」となっている方をダウンロード(無料、安定バージョン)します。
Dockerデーモンは、mac起動時に自動で立ち上がります。上部のメニューバーのクジラのアイコンが表示されて「Docker Desctop is running」となっていれば大丈夫です。

手順①既存アプリのディレクトリに以下3つのファイルを配置

スクリーンショット 2020-08-18 0.53.10.png

  • Dockerfile
  • docker-compose.yml
  • entrypoint.sh

アプリケーションのディレクトリ直下に3つのファイルを新規作成する

▼Dockerfile記述内容

FROM ruby:2.6.5

APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn

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

WORKDIR /myapp
COPY Gemfile ./Gemfile
COPY Gemfile.lock ./Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /myapp

# 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"]

▼docker-compose.yml記述内容

version: '3'
services:
  db:
    image: mysql:5.6 #既存アプリとあわせる。ターミナルに「mysqladmin version」で確認
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
      - "4306:3306"  #Sequel ProでDBを確認する為、4306としておく
    volumes:
      - mysql-data:/var/lib/mysql
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - 3000:3000
    depends_on:
      - db
    tty: true
    stdin_open: true
volumes:
  mysql-data:

▼entrypoint.sh

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

手順②config/database.ymlの編集

configディレクトリにあるdatabase.ymlを以下のように編集

▼config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db # database.ymlの記述とあわせておく

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

手順③Dockerイメージの作成

% docker-compose build

手順④MySQLコンテナを起動

% docker-compose up -d

この時点ではwebは起動してなくてよい。
「docker-compose ps」コマンドでdbのStateがUPとなっていればよい。

手順⑤DBを作成する

% docker-compose run web rails db:create

database.ymlをもとにwebコンテナからmysqlコンテナへ接続して、DBを作成する。成功すると下記表示。

Created database 'myapp_development'
Created database 'myapp_test'

手順⑥マイグレーションを実行

% docker-compose run web rails db:migrate

database.ymlをもとにwebコンテナからmysqlコンテナへ接続して、マイグレーションを実行する。成功していれば下記のような実行結果。

== 20200812024158 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0091s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0109s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0120s
== 20200812024158 DeviseCreateUsers: migrated (0.0326s) =======================

手順⑦webコンテナも起動させる

% docker-compose up -d

上記実行後、「docker-compose ps」コマンドでweb、db共にUPとなっていれば成功。

手順⑧gemのインストール

% docker-compose exec web bundle install

最後に!SequelProに接続

スクリーンショット 2020-08-18 1.47.43.png

  • 標準を選んで、ホストに自身を表す「127.0.0.1」
  • パスワードはdocker-compose.ymlに記載のパスワード
  • ポートはdocker-compose.ymlに記載のポート番号

以上です!
localhost:3000に接続するとアプリケーションを確認できると思います!

参考にさせて頂いた記事

9
6
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
9
6