Docker Compose

Docker Composeとは、複数のコンテナを一括で効率的に操作できるツールです。 Docker Composeでは、あらかじめ用意した定義ファイル(compose.yml)に従い、複数のコンテナを一括で作成・起動します。 Docker だけでは、1度に1つずつのコンテナしか操作できません。

基本操作

◇イメージのビルド

docker-compose build

◇コンテナの作成と起動

docker-compose up -d

◇コンテナを停止・削除

docker-compose down

◇コンテナの一覧を表示

docker-compose ps

◇ログを表示

docker-compose logs

◇コンテナを作成してコマンド実行

docker-compose run <サービス> <コマンド>

◇起動中のコンテナにコマンド実行

docker-compose exec <サービス> <コマンド>

基本構成

.
├── Dockerfile
├── docker-compose.yml
└── src
    └── Gemfile

方向性:Ruby on Rails によるWebアプリケーション

初期設定

Dockerfile

# ベースイメージ
FROM ruby:2.7

ENV RAILS_ENV=production

# 必要なライブラリのインストール & アップデート
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.lost \
/etc/apt/sources.list.d/yarn.list \
  && apt-get update -qq \
  && apt-get install -y nodejs yarn

# 作業ディレクトリを決める
WORKDIR /app

# ローカルのソースコード「./src」を、dockerの作業ディレクトリ「/app」へコピー
COPY ./src /app

# Ruby関連のライブラリのインストール。gemファイルのインストール
RUN bundle config --local set path 'vendor/bundle' \
  && bundle install

src/Gemfile

#railsのインストール
source 'https://rubygems.org'

gem 'rails', '~> 6.1.0'

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - ./src/db/mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - ./src:/app
    ports:
      - "3000:3000"
    environment:
      RAILS_ENV: development
    depends_on:
      - db

dbのvolumeが一つポイント。

ローカルの./src/db/mysql_dataを、docker側の/var/lib/mysql に同期させている、という意味になる。

これがないと、毎回コンテナを起動の度にdbを入れ直さなくてはならない。

コンテナの作成

docker-compose run web rails new . --force --database=mysql

こちらを実行すると、srcディレクトリに、Ruby on Railsフレームワーク一式がインストールされる。

(少し時間かかる)