はじめに
既存のRailsで作成したアプリにDockerを導入したいと思い作成しました。
事前にDocker,Docker composeは導入済みになります。
開発環境
RubyonRails 2.6.5
MYSQL 5.6
導入手順
①Dockerfileをappと同列で新規作成
②docker-compose.ymlをappと同列で新規作成
③database.ymlを編集
Dockerfileについて
#参照する言語を指定
FROM ruby:2.6.5
#Dockerコンテナ内で実行するコマンドを定義
RUN apt-get update && apt-get install -y \
build-essential \
nodejs
WORKDIR /アプリ名
#Gemfileをコピー
COPY Gemfile /アプリ名/Gemfile
COPY Gemfile.lock /pictweet/Gemfile.lock
#Gemを導入
RUN gem install bundler
RUN bundle install
docker-compose.ymlについて
docker-compose.yml
version: '3'
volumes:
mysql-data:
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- "3000:3000"
volumes:
- '.:/アプリ名'
tty: true
stdin_open: true
#dbとの依存関係を記載
depends_on:
- db
links:
- db
db:
image: mysql:5.6
volumes:
- 'mysql-data:/var/lib/mysql'
environment:
- 'MYSQL_ROOT_PASSWORD=自身のパスワード'
database.ymlの編集
config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: 自身のパスワード
host: db #dockerのdbコンテナに対応
development:
<<: *default
database: 自身のアプリ名_development
コマンド入力
上記3つのファイルが作成し終わったら実行
①dockerfileを元にimageの作成
$ docker-compose build
②データベースとアプリのコンテナを作成、起動
$ docker-compose run web rails db:create db:migrate
③全てのコンテナの連携・起動
$ docker-compose up
以上を実行後、localhost:3000に接続。
終わりに
導入の中で自分がつまずいたのはrunとupの違いが分からすコマンドが抜けてしまった所でした。docker buildでイメージの作成。docker-compose upのみではコンテナが作られないので、必ずdocker-compose runを行う。
また、間違ってコンテナを作ってしまい、削除する際に便利なコマンドがあったので紹介します。
$ docker-compose down --rmi all --volumes --remove-orphans
こちらで全てのコンテナとイメージをまとめて削除できます。
こんなに簡単に仮想サーバーを立てたり、削除したりできるシステムはすごいと改めて感じました。