はじめに
自動的にdockerのコンテナ上でrailsの開発環境を作ってくれるShellScriptを作成したのでメモがわりに投稿。
環境
- Docker for mac
- ruby 2.4.0
- mysql 5.7 を使用。
Docker for macはインストール済みとする。
shellscript
docker_rails.sh
#!/bin/bash
echo "docker pull ruby:2.4.0"
docker pull ruby:2.4.0
echo "docker pull mysql:5.7"
docker pull mysql:5.7
echo "docker images"
docker images
# make Dockerfile
cat <<'EOF' > Dockerfile
FROM ruby:2.4.0
ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /app_name
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
EOF
# make Gemfile
cat <<'EOF' > Gemfile
source 'https://rubygems.org'
gem 'rails'
EOF
# make Gemfile.lock()
touch Gemfile.lock
# make docker-compose.yml
cat <<'EOF' > docker-compose.yml
version: '2'
services:
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=password
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app_name
ports:
- "3000:3000"
depends_on:
- db
EOF
echo "docker-compose run web rails new . --force --database=mysql --skip-bundle"
docker-compose run web rails new . --force --database=mysql --skip-bundle
# fix Gemfile
echo "fix Gemfile(uncoment mini_racer)"
cat Gemfile | sed "s/# gem 'mini_racer'/gem 'mini_racer'/" > __tmpfile__
cat __tmpfile__ > Gemfile
rm __tmpfile__
docker-compose build
# fix config/database.yml
echo "fix config/database.yml"
cat config/database.yml | sed 's/password:$/password: password/' | sed 's/host: localhost/host: db/' > __tmpfile__
cat __tmpfile__ > config/database.yml
rm __tmpfile__
echo "docker-compose run web rake db:create"
docker-compose run web rake db:create
echo "docker-compose up"
docker-compose up
上記のdocker_rails.sh
を他にファイルの無いディレクトリ上で実行する。
bash docker-rails.sh
しばらくしてターミナルで
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
と表示されたらブラウザでlocalhost:3000
にアクセスするとrails serverが立ち上がっているはずです。