環境構築
RubyOnRails
docker
docker-compose
Docker-Toolbox

Windows10HomeだけどDockerで開発してもいいよね!!

はじめに

前回の「DockerでRuby on Railsの開発をしよう」という記事で、Windows10HomeでもDockerを使えると言う話をしたが、自分では試していなかったので挑戦してみた。
もし、Windows10ProやMacを使えるならこの記事は参考にならないかもしれない。

概要

WindowsでDockerを使用したいときは、ProでDocker for Windowsを使うことが推奨されている。
しかし、今回はDocker for Windowsの対象になっていないHomeでDockerを動かしたい。

そこで、"Docker-Toolbox"を用いてDockerを動かしていく。

環境構築

さくっとできる。

Dokcer-Toolboxの導入

まずDocker Toolbox overviewからDocker-Toolboxをダウンロードする。

スクリーンショット 2018-07-10 11.56.53.png

次に、ダウンロードしたものをクリックしてインストールする。
インストールが終わると、次のようなショートカットが作られる。

dsafgdthyujyiuolui.PNG

画像の左側にある"Docker Quickstart Terminal"を起動する。

aszdfghnjkljyfthrdg.PNG

起動したら少し時間がかかるが上の画像のような画面になる。
赤線が引かれているIPは後々話に出てきます。
これで導入は完了した。

conemuで使う方法

Windowsでターミナルを触るならcomemuを使いたいくなる。
まだの人は、ここからダウンロードしよう。
ということで設定していく。

sdwfesrdthfjgyukhio.PNG

設定画面を開く。 setting > startup > tasks
task parametersには、開きたいディレクトリ(Workspase)を指定している。
commandsは、他の記事を参考にした。

task parameters:

/dir "C:\Program Files\Docker Toolbox"

commands:

"C:\Program Files\Git\bin\bash.exe" --login -i -new_console:C:"C:\Program Files\Docker Toolbox\docker-quickstart-terminal.ico" "C:\Program Files\Docker Toolbox\start.sh"

これでstartupをDockerにすれば設定は完了なので再起動したらちゃんと開くことができる。

実際に動かしてみる

今回は、Ruby on Railsを想定した話をする。
簡単に確認したいだけなら、定番の$ docker run hello-worldでわかる。

必要なファイルの準備

今回用意するのは、Dockerfiledocker-compose.ymlGemfileGemfile.lockの4つ。
ここから先の詳しい話は、前回の「DockerでRuby on Railsの開発をしよう」で説明している。

Dockerfile

Dockerfile
FROM ruby:2.5.1
ENV LANG C.UTF-8

RUN apt-get update -qq && apt-get install -y \
    build-essential \
    nodejs \
 && rm -rf /var/lib/apt/lists/*

RUN gem install bundler

WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install

ENV APP_HOME /myapp
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME

docker-compose.yml

docker-compose.yml
version: '3'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
      - bundle:/usr/local/bundle
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    ports:
      - '3306:3306'
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  bundle:
  mysql_data:

Gemfile

Gemfile
source 'https://rubygems.org'

gem 'rails', '5.2.0'

Gemfile.lock

Gemfile.lock
# 何も書かなくてよい

コマンドの実行

準備ができたので、Dockerを動かしていく。

$ docker-compose run web bundle exec rails new . --force --database=mysql --skip-bundle

これでRailsプロジェクトを作成できる。
次に、config/database.ymlのdefault部分を変更する。

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password    # docker-compose.ymlで設定したもの 今回は空白
  host: db                           # docker-compose.ymlで設定サービス名

続いてここでコンテナの作成と起動を行う。

$ docker-compose build
$ docker-compose up -d

コンテナが動いているか確認。

$ docker ps

ちゃんと動いていれば大丈夫。

ブラウザで確認

恥ずかしながら、私はここで少し引っかかってしまった。
ブラウザで開くときは、DockerマシンのIPで開かないといけないので、コマンドで確認する。

$ docker-machine ip
192.168.99.100

これでわかったので、Webブラウザ(今回はGoogle Chrome)で開いてみる。
asrtyu.PNG

できた:relaxed:
画像だとRubyのバージョンが違うが、特に問題はない。

おわりに

新しい環境を作るのが面倒だと思う方は多いはず。
ただ、Dockerならサクッとできるので多くの人に使ってもらいたい。
質問があれば、コメントにお願いします。

参考

Windows10 HomeでDockerを使って簡単にTOPPERS/EV3RTのビルド環境を構築する
ConEmuからDocker Toolbox起動をする