LoginSignup
0
2

More than 3 years have passed since last update.

Docker Desktop + WSL2を用いてRails5.2の開発環境を構築した際のメモ【Windows10】

Last updated at Posted at 2021-01-04

動作環境について

  • エディション
    Windows 10 Home
  • バージョン
    20H2
  • OSビルド
    19042.685
  • Linuxディストリビューション
    Ubuntu LTS 20.04.1

Docker Desktopについて

Docker Desktopをインストールする前に、WSL2を導入しなければなりません。

WSL2を導入していない場合はこちらのドキュメントを参考にすると良いと思います。

Docker Desktopは下記の公式サイトからインストールします。
https://www.docker.com/products/docker-desktop

インストールが完了したら、Docker Desktopを起動して、右上にある設定ボタンをクリックします。
image.png
GeneralのUse the WSL 2 based engine (Windows Home can only run the WSL 2 backendにチェックがついていることを確認してください。
image.png
次にResourcesのWSL INTEGRATIONを開いて、インストール済みのWSL2ディストリビューション(私の場合はUbuntu-20.04)にチェックを入れ、Apply&Restartを押します。

参考資料:https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-containers

Railsの環境構築について

使用環境

  • rails 5.2.4.4
  • ruby 2.7.2
  • MySQL 5.7.32

rails new から rails s を実行するまでの流れ

従来の環境では rails new コマンドを実行すると、新しくディレクトリが作成されましたが、Dockerの場合はあらかじめ手動でディレクトリを作成する必要があります。例えば、rails new sample_appとコマンドを打てば、sample_appディレクトリが作成されましたが、Dockerの場合は最初にsample_appディレクトリを作る必要があり、これからの作業はあらかじめ作成したディレクトリ下で行います。

ファイルの準備

あらかじめ作っておいた任意のディレクトリに、DockerfileGemfileGemfile.lockdocker-compose.ymlの4つのファイルを作成します。

Dockerfile

Dockerfile
FROM ruby:2.7.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
   && apt-get install -y nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

簡単に説明すると、DockerfileはDockerイメージを取ってくるためのものです。Dockerイメージは、Dockerコンテナを作る際に必要なもので、これを元に仮想環境が実行されます。
FROMコマンドは、必要なイメージを取ってくるためもので、Dockerfileの最初に記述します。
RUNコマンドは、コマンドを実行するためのものです。
WORKDIR /myappでコンテナ内の作業ディレクトリをmyappに設定します。
ADD Gemfile /myapp/Gemfileで、ローカルのGemfileをコンテナ内のmyapp/Gemfileにコピーします。

Gemfile

Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.4.4'

Gemfile.lock

Gemfile.lockという名前で空のファイルを作成してください。

docker-compose.yml

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7.32
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    volumes:
      - ./db/mysql/volumes:/var/lib/mysql

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

これも簡単に説明します。
docker-composeは複数のコンテナを管理するためのツールです。今回はdb(mysql)とweb(rails)の2つのコンテナを立ちあげます。
docker-composeのコマンドを1回実行するだけで、このファイルを元にコンテナを実行し、仮想環境を立てることができます。

versionはdocker-composeのバージョンです。下記サイトから現在の最新バージョンを確認できます。
https://docs.docker.com/compose/compose-file/

servicesはアプリケーションを動かす際に必要となる各要素(今回はdbとweb)をserviceとして定義する際に必要な記述です。
volumesはローカル(ホスト)とコンテナを同期するための記述です。
portsはコンテナ内のwebサーバーにアクセスできるようにするためのもので、今回は"3000:3000"と記述してあるが、これでコンテナ内のポート3000番をホストのポート3000番に対応付けています。

コマンドの実行

DockerfileGemfileGemfile.lockdocker-compose.ymlを作成したら、これらのファイルを作成したディレクトリに移動してコマンドプロンプトで以下のコマンドを実行します。
その際、wsl環境に入らずとも、ローカルのままで実行しても大丈夫です。

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

このコマンドを実行すると、たくさんのフォルダやファイルが作成されます。
もしかしたらnokogiri関連のインストールでエラーが起きるかもしれませんが、私の場合はPCを再起動したら解決しました。

config/database.ymlの修正

config/database.ymlを一部抜粋
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db

password:host:をdocker-compose.ymlで記述した内容に修正します。
そして以下のコマンドを実行します。

ローカルのファイルを修正した際実行するコマンド(毎回する必要はない)

docker-compose build

railsサーバーを立ち上げる

まず、以下のコマンドを実行してデータベースを作成します。

docker-compose run web rails db:create

もしエラーが出たら、db:migrateは以下のコマンドを実行したあとに行うと良いかもしれません

 docker-compose run web ./bin/rails db:migrate:reset

次に下のコマンドを実行します。

docker-compose up

このコマンドを実行することで、docker-compose.ymlで記述した通りにコンテナが起動します。

http://localhost:3000/にアクセスするといつもの画面が出ると思います。

今後のDockerを用いたRails開発では、railsコマンドの前にdocker-compose run webを付け足して、

docker-compose run web rails

という感じでコマンドを実行していきます。

終わりに

WSL2がDocker Desktop for Windowsのバックエンドとして使えるようになって、簡単にDockerの環境構築ができるようになったので前から気になっていたDockerを導入してみました。前までvagrantでrailsの開発を行っていましたが、Dockerを導入してから開発が便利になりました。

参考資料

https://www.ccs1981.jp/blog/wsl2%E3%81%A8docker%E3%81%A7%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B/
http://docs.docker.jp/v17.06/engine/reference/builder.html
https://qiita.com/yuta-ushijima/items/d3d98177e1b28f736f04

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2