目次
環境
・Windows 11 Home
・WSL2
・Docker Desktop for Windows 4.12.0
・ubuntu 22.04
Docker関連のファイルを用意する
作業するディレクトリの中に、srcのディレクトリ・Dockerfile・docker-compose.ymlを作成します。
srcディレクトリの中にGemfileを作成します。
Dockerfile
FROM ruby:2.7
# 必要なライブラリのインストール(node.js・yarnをインストール)
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.list \
&& apt-get update -qq \
&& apt-get install -y nodejs yarn
# 作業ディレクトリを指定
WORKDIR /app
# railsのアプリケーションをコードをDockerのappディレクトリに置く
COPY ./src /app
# ruby関連のライブラリのインストール
RUN bundle config --local set path 'vendor/bundle' \
&& bundle install
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6.1.0'
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0
# Mysql8.0の認証形式が変わったため実行するコマンド
command: --default-authentication-plugin=mysql_native_password
# ローカルディレクトリ:Dockerのディレクトリ (ローカルのディレクトリの同期)
volumes:
- ./src/db/mysql_data:/var/lib/mysql
# 環境変数でパスワードを指定
environment:
MYSQL_ROOT_PASSWORD: password
web:
# 同じ階層のDockerfileを使用する宣言
build: .
# 実行するコマンド (Railsサーバーを起動する)
command: bundle exec rails s -p 3000 -b '0.0.0.0'
# ローカルとDocker側のファイル共有
volumes:
- ./src:/app
# ローカルのポートとDocker側のポート指定
ports:
- "3000:3000"
# 依存関係-webはdbサービスに依存している(接続先のホスト(IPアドレス)をdbと記述して接続できる)
depends_on:
- db
初期設定
docker-compose run web rails new . --force --database=mysql
rails new をしてDBはMySQLを使用するコマンドを実行して、Railsのひな型が作成されます。(時間かかります。)
実行後
Gemfileの内容が更新されたり、Dockerfileが内容が更新されたときは、イメージのビルドをし直す。
docker-compose build
うまくいかない場合は、sudoを先頭にして実行してください。
sudo docker-compose build
次にsrcディレクトリのconfigディレクトリの中のdatabase.ymlのpasswordに値を入力します。
入力する値は、docker-compose.ymlのenvironmentに設定した値のpasswordです。
次にhost(接続先)をlocalhostからdbに変更します。
データベースの作成
webのサービスの方に対して「rails db:create」のコマンドを実行してデータベースの作成をします。
docker-compose run web rails db:create
Docker起動してRailsのWellcomeページを確認する。
コンテナを作成して、起動させる。
docker-compose up
localhost:3000にアクセスする。
コンテナ削除と停止
下記のコマンドを実行してコンテナ停止して削除をします。
docker-compose down
その他のDockerコマンド
-dのオプションを付けるとバックグラウンドで起動できる。
docker-compose up -d
ログの確認コマンド
docker-compose logs
コンテナ内でコマンドを実行したいとき
#docker-compose exec <サービス> <コマンド>
docker-compose exec web /bin/bash
GemfileやDockerfileを修正した時に反映するとき
docker-compose build
コマンドを実行してイメージの作り直しを行う
docker-compose up -d
コマンドを実行して、コンテナを作成し起動しなおす。