ども、かっぱです。
tl;dr
Docker Compose って複数のコンテナで構成されるアプリケーションを管理するのにイイよ!って人に薦めておきながら、ずっと触れてなかったのでドキュメントの Quickstart を見ながら手を動かしてみた。
参考
上記の例は Rails + PostgreSQL の組み合わせだけど、それだと面白くないので、上記の docker-compose.yml や Dockerfile を参考に Nginx + Rails + MySQL な構成にして Rails の一人学習環境の構築を目的として進める。ゴールは環境の構築ではなく、構築した環境で Rails アプリケーションを構築してみること。(本記事でゴールまでたどり着けるか解らないけど。)
メモ
以下のような感じで
各種ファイル
- docker-compose.yml
db: image: mysql:5.6 environment: MYSQL_ROOT_PASSWORD: your_password MYSQL_DATABASE: myapp_test ports: - "3306:3306" web: build: . command: sh run.sh volumes: - /tmp/nginx/:/var/log/nginx - .:/myapp ports: - "80:80" - "3000:3000" links: - db
- Dockerfile
FROM ruby:2.3.0 RUN apt-get update -qq && \ apt-get install -y build-essential libpq-dev && \ apt-get install -y nginx && \ mkdir /myapp WORKDIR /myapp ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock RUN bundle install ADD app.conf /etc/nginx/sites-available/app.conf RUN ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/app.conf && \ rm -f /etc/nginx/sites-available/default ADD . /myapp RUN chmod 755 /myapp/run.sh
# # Rails 起動 # bundle exec rails server -p 3000 -b '0.0.0.0' -d # # Nginx 起動 # /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
- Gemfile
source 'https://rubygems.org' gem 'rails', '4.2.0'
- nginx 設定
upstream app01 { server 127.0.0.1:3000; } server { listen 80; server_name localhost; location /rails { root /usr/share/nginx/html; proxy_pass http://app01; proxy_set_header Host $host; } }
手順
- Rails アプリケーションを作成(アプリケーションのひな型みたいなものを作成する)
# # rails new する # $ docker-compose run web rails new . --force --database=mysql --skip-bundle # # 作成されたアプリケーションの権限を変更する # $ sudo chown -R $USER:$USER .
- Gemfile の修正
source 'https://rubygems.org' gem 'rails', '4.2.0' # Rails 4.2.0 だと以下のようにバージョンを固定する必要があった gem 'mysql2', '~> 0.3.20' # コメントアウトを外す gem 'therubyracer', platforms: :ruby
- Docker イメージのビルド
$ docker-compose build
- config/database.yml を以下のように作成
development: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: your_password host: db test: <<: *default database: myapp_test
- コンテナを起動
$ docker-compose up
確認
- docker-compose ps
$ docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------- railsmysql_db_1 /entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp railsmysql_web_1 sh run.sh Up 0.0.0.0:3000->3000/tcp, 0.0.0.0:80->80/tcp
- docker ps
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES xxxxxxxxxxx1 railsmysql_web "sh run.sh" 14 hours ago Up 14 hours 0.0.0.0:80->80/tcp, 0.0.0.0:3000->3000/tcp railsmysql_web_1 xxxxxxxxxxx2 mysql:5.6 "/entrypoint.sh mysql" 14 hours ago Up 14 hours 0.0.0.0:3306->3306/tcp railsmysql_db_1
- 画面で確認
ひとまずは以下のページが表示されることを確認。
よし、よし。
ひとまず
Docker Compose を使って目的の環境を構築することが出来たはず。若干、Rails を動かす為の Gem 導入で躓きそうになるけど、それ以外は特難しいことは無いと思われる。
以上。