docker for mac 導入する

普段、プロジェクト毎に vurtualbox で環境構築していたけど、そろそろ docker にしようかなと思ったのでやってみる。 docker いれて mysql と rails が使えるようにするところまで。

参考

docker for mac をインストールする

Docker Store から stable をダウンロードしてきてインストール。らくちん。

ruby と mysql のイメージを取得

$ docker pull ruby:2.4.2
$ docker pull mysql:5.7
$ mkdir -p ~/Project/app01; cd $_

以降、 ~/Project/app01 での作業です。

Gemfile

$ cat << _EOS_ > Gemfile
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "rails"
_EOS_

$ touch Gemfile.lock

色々ディレクトリ作る

$ mkdir -p ../data/mysql # mysqlのデータ置き場
$ mkdir -p docker/mysql # mysql の接続パスワードはここに置く
$ mkdir -p docker/rails # Dockerfile はここに置く

Dockerfile

$ cat << _EOS_ > docker/rails/Dockerfile
FROM ruby:2.4.2
ENV LANG C.UTF-8

RUN apt-get update -qq
RUN apt-get install -y build-essential nodejs
RUN apt-get install -y mysql-client

RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
_EOS_

docker-compose.yml

$ cat << _EOS_ > docker-compose.yml
version: '2'
services:
  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - ../data/mysql/volumes:/var/lib/mysql
    extends:
      file: ./docker/mysql/password.yml
      service: password
  web:
    build:
      context: .
      dockerfile: ./docker/rails/Dockerfile
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    ports:
      - "3000:3000"
    volumes:
      - .:/myapp
    environment:
      RAILS_ENV: development
    extends:
      file: ./docker/mysql/password.yml
      service: password
    depends_on:
      - db
_EOS_

password.yml

$ cat << _EOS_ > docker/mysql/password.yml
version: '2'
services:
  password:
    environment:
      MYSQL_ROOT_PASSWORD: password
_EOS_

起動まで

$ docker-compose run --rm web rails new . --force --database=mysql --skip-bundle
$ docker-compose build
$ docker-compose up -d

で、mac から localhost:3000 でアクセスすると…できたー!

これから docker が好きになれそうな予感