LoginSignup
0
0

More than 3 years have passed since last update.

Rails6にDockerを導入したのでまとめてみた(初学者)

Last updated at Posted at 2021-01-14

目的

ポートフォリオ実装してdockerを導入したのでアウトプットします。
Dockerがなんなのかわからなかったので色々な方のQiitaを参考にしております

Dockerのインストール

私はこの方の記事を見てインストールしました!!
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81
インストールできたら以下コマンドを実行します。

 % docker run -d -p 80:80 docker/getting-started

インストールの確認

% docker -v

このようなコマンドが出たらインストール完了です。
Docker version 20.10.2, build 2291f61

% docker-compose -v

こちらも同様にdocker-compose version 1.27.4, build 40524192が出力されたら完了です。

Docker導入に渡って

メリットとしてはローカル環境に構築したrailsとmysqlを1コマンド叩くだけで実行できるようになる。と記載されていたのですが、初学者の私には理解が難しかったです。dockerを導入した後にこの意味がわかったのでまずは手を動かした方がいいです。

開発中のアプリでdockerを導入

早速ですが導入していきます。
フレームワークはRubyonRails6を使用しています。

Dockerfileの作成

手順としてDockerを導入したい開発中のアプリに移動します

~ % cd アプリ名
アプリ名 % touch Dockerfile

Dockerfileが作成されたので下記を記載してください。

FROM ruby:2.6.5 

RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       libpq-dev \
                       nodejs

RUN mkdir /アプリ名
WORKDIR /アプリ名

ADD ./Gemfile /アプリ名/Gemfile
ADD ./Gemfile.lock /アプリ名/Gemfile.lock

RUN gem install bundler
RUN bundle install
ADD . /アプリ名

アプリ名を自身の開発しているアプリ名に変えましょう。

Docker-compose.ymlを作成しましょう。

アプリ名 % touch docker-compose.yml

下記を記述しましょう。

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'password' # このままpasswordとしても問題なく動く
    ports:
      - "4306:3306" #DockerコンテナとSequelpro接続の為に必要な設定

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/アプリ名
    ports:
      - "3000:3000"
    depends_on:
      - db

config/database.ymlを編集

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  socket: /tmp/mysql.sock
  host: db
development:
  <<: *default
  database: アプリ名_development


production.
test:
  <<: *default
  database: アプリ名_test

追加されたのは、passwordhost: dbのみ

docker-compose.yml buildでコンテナの作成

アプリ名 % docker-compose build

エラーがなかったら成功です。

コンテナ上でDB作成とmigrateの実行

アプリ名 % docker-compose run web bundle exec rails db:create

Rails6だとこのコマンドを実行するとエラーが出てしますので編集します。

config/webpacker.yml
  # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
  check_yarn_integrity: false

およそ56行目あたりcheck_yarn_integrity: true
になっているのでこれをfalseに変えます。

編集が終わったら、もう一度同じコマンドを実行しましょう。
続いてmigrateしましょう。

アプリ名 % docker-compose run web bundle exec rake db:migrate

これでコンテナ上でdb設計ができました。最後にコンテナを起動しましょう。

アプリ名 % docker-compose up 

localhost:3000にアクセスし起動できていたら導入完了です。

docker hubから起動

複数のアプリをコンテナに積んだのでコマンドを打たずクリック一つでアプリを起動できます。
赤字のRANをクリックすると起動できます。
スクリーンショット 2021-01-14 13.27.21.png

もう一回クリックすれば停止できます。

単語集

①dockerfileって何

コンテナを作成する材料。docker-compose build のコマンドを実行するとステップに分けた読み込みをしていたと思います。読み込みが成功したらコンテナが作成されたよの意味。

②docker-composeって何

複数のコンテナを同時に動かすためのツールのこと

こんな感じです!
もっと詳しく書けるように頑張ります。

0
0
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
0
0