#環境
- Ruby: 2.6.0
- Rails: 6.0.3
- MySQL
- MacOS
#Dockerの要約
##Dockerとは?
-
Docker Engine
を常駐させることで、ゲストOSを使用せず、ホストOSを基盤にミドルウェア以降を仮想環境(コンテナ)として起動する仕組み。 - ミドルウェア等の層をimageと呼び、
Docker Hub
で公開されている構成を流用したり、Dockerfile
を用いて自身で新規作成する事もできる。 -
docker-compose.yml
に複数のコンテナ構成を記述することでこれらを一括起動できる。 - 流動データはコンテナ削除とともに消えるため、残したい場合にはホストのデータをコンテナにマウントする必要がある(
docker-compose.ymlに記述
)。
#手順
##1. Dockerfile・docker-compose.yml作成
FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN gem install bundler:2.0.2 && bundle install
COPY . /myapp
[FROM] 使用するイメージとバージョン
[RUN] コマンドの実行
[WORKDIR] 作業ディレクトリ
[ADD] ファイルをコンテナへコピー
[EXPOSE] port番号
[CMD] イメージ内部のソフトウェア実行(ここではRailsを指す)
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
volumes:
- mysql-data:/var/lib/mysql
ports:
- "3306:3306"
web:
tty: true
stdin_open: true
build: .
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
links:
- db
volumes:
mysql-data:
dbボリュームを設定しコンテナを終了してもデータをボリューム内に残すための記述。
appボリュームを設定しローカルにあるディレクトリをコンテナにマウントするための記述。
コマンドの/bin/sh -c "rm -f tmp/pids/server.pid
に関しては、Pidファイル削除のために記述。起動時に残っているとエラーを吐くため削除が必要。自分で削除しても良いが、これを書けば起動時に自動で削除するようになる。
##2. database.yml
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
##3. エラーへの対処
trueをfalseに変更すると正常に動作する。
厳密な整合性のチェックをオフにする事でエラーを回避しているようです。
記述時点では、アプリケーション動作に問題は発生していません。
========================================
Your Yarn packages are out of date!
Please run `yarn install --check-files` to update.
========================================
webpacker.yml
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: false
以上