MacのDockerでRails5+MySQL5.7開発環境を作ったメモ
任意のディレクトリを作ってその中で作業する前提です
ruby2.3.0 / rails 5.0.0 / mysql5.7でやってみます
Dockerfile
何はともあれDockerfileが必要です。下記のような内容で作成します。
$ cat > Dockerfile FROM ruby:2.3.0 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /myapp WORKDIR /myapp ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock RUN bundle install ADD . /myapp
Gemfile*
GemfileとGemfile.lockを作成します。Dockerfileと同じディレクトリでOK
$ cat > Gemfile source 'https://rubygems.org' gem 'rails', '5.0.0' $ touch Gemfile.lock
docker-compose.ymlをつくる
$ cat > docker-compose.yml version: '2' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: testpassword web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db
ここまでで下記のような状態になります
$ ls -l total 16 -rw-r--r-- 1 okisanjp staff 222 11 17 17:02 Dockerfile -rw-r--r-- 1 okisanjp staff 51 11 17 17:04 Gemfile -rw-r--r-- 1 okisanjp staff 0 11 17 17:04 Gemfile.lock -rw-r--r-- 1 okisanjp staff 211 11 17 17:09 docker-compose.yml
実行
とりあえず実行してみます
$ docker-compose build $ docker-compose run web rails new . --force --database=mysql --skip-bundle
最終的に、ディレクトリ内はこうなりました
$ ls -l total 64 -rw-r--r-- 1 okisanjp staff 222 11 17 18:13 Dockerfile -rw-r--r-- 1 okisanjp staff 1725 11 17 18:26 Gemfile -rw-r--r-- 1 okisanjp staff 4264 11 17 18:31 Gemfile.lock -rw-r--r-- 1 okisanjp staff 374 11 17 18:20 README.md -rw-r--r-- 1 okisanjp staff 227 11 17 18:20 Rakefile drwxr-xr-x 10 okisanjp staff 340 11 17 18:20 app drwxr-xr-x 7 okisanjp staff 238 11 17 18:20 bin drwxr-xr-x 14 okisanjp staff 476 11 17 18:20 config -rw-r--r-- 1 okisanjp staff 130 11 17 18:20 config.ru drwxr-xr-x 3 okisanjp staff 102 11 17 18:20 db -rw-r--r-- 1 okisanjp staff 271 11 17 18:11 docker-compose.yml drwxr-xr-x 4 okisanjp staff 136 11 17 18:20 lib drwxr-xr-x 4 okisanjp staff 136 11 17 18:32 log drwxr-xr-x 9 okisanjp staff 306 11 17 18:20 public drwxr-xr-x 9 okisanjp staff 306 11 17 18:20 test drwxr-xr-x 7 okisanjp staff 238 11 17 18:32 tmp drwxr-xr-x 3 okisanjp staff 102 11 17 18:20 vendor
config/database.yml
default: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: testpassword host: db
host: dbは、docker-compose.ymlで設定した
services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: testpassword
この部分に依存してます
なぜかmysql2関連でエラー
DBにもアクセスできるはずなのでdb:create後起動してみます
$ docker-compose run web rake db:create Could not find gem 'mysql2 (< 0.5, >= 0.3.18)' in any of the gem sources listed in your Gemfile or available on this machine.
何故かmysql2が無いというエラーになってしまう
ログを見る限り、mysql2(0.4.5)がインストールされたはずなのですが・・・
仕方ないので、とりあえずGemfileを書き換えて再度build
Gemfileを書き換える
gem 'mysql2', '~> 0.3.20'
$ docker-compose build $ docker-compose run web rake db:create Created database 'myapp_development' Created database 'myapp_test' $ docker-compose up
http://localhost:3000/ にアクセスしてみます
キタ━━━━(゚∀゚)━━━━!!
何か編集してみる
articlesでscaffold作ってみます
$ docker-compose run web rails g scaffold articles title:string body:text $ docker-compose run web rails db:migrate == 20161118014602 CreateArticles: migrating =================================== -- create_table(:articles) -> 0.1155s == 20161118014602 CreateArticles: migrated (0.1156s) ==========================
起動して確認
OKです
追記
データの永続化についてはこちらです