TL;DR
掲題の通りですが、docker
+ docker-compose
を使ってローカルにRails環境をセットアップします
※ n番煎じかわかりませんが、自分用ということで…
準備
mac + Docker for Macです
- macOS 10.14.5
- docker 18.09.2
- docker-compose 1.23.2
※ Docker for Macはこちらから
ディレクトリ構成
.
├── .env
├── docker
│ └── nginx
│ └── etc
│ └── nginx
│ └── conf.d
│ └── default.conf
└── docker-compose.yml
docker-compose.yml
version: '3'
services:
app:
image: ruby:latest
volumes:
- .:/app:cached
tty: true
depends_on:
- db
nginx:
image: nginx:alpine
volumes:
- .:/var/www:cached
- ./docker/nginx/etc/nginx/conf.d:/etc/nginx/conf.d
ports:
- "8001:80"
depends_on:
- app
db:
image: mysql:5.7
volumes:
- mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
mysql:
driver: local
.env
MYSQL_DATABASE=testdb
MYSQL_USER=testuser
MYSQL_PASSWORD=testpass
MYSQL_ROOT_PASSWORD=testrootpass
docker/nginx/etc/nginx/conf.d/default.conf
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name http;
root /var/www/public;
location / {
proxy_pass http://app:3000;
}
}
手順
ローカル
$ docker-compose up -d
$ docker-compose ps
$ docker-compose exec app bash
appコンテナ
以降はappコンテナ内でのオペレーション
# cd /app
# gem install rails
# rails new .
再びローカル
以下のようにGemfileを一部編集(マウントしてるのでローカルで編集する)
# gem 'mini_racer', platforms: :ruby
↓
gem 'mini_racer', platforms: :ruby
再びappコンテナ
コンテナ内で続き
# cd /app
# bundle install
# rails s -b 0.0.0.0
動作確認
http://localhost:8001 にアクセスして「Yay! You’re on Rails!」確認できればOK
まとめ
-b 0.0.0.0
オプションの必要性に気づけず、地味に502で時間浪費しました…
GitHubにも上げたので、cloneしてもらえばすぐに手順のコマンドから試せそうです
(.env
は.env.example
から自分で作ってね)
自分用でRailsアプリケーション作りながらメンテしていくかもしれません