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 のフレームワーク一式がインストールされる。
(少し時間かかる)