Docker for MacでRails + nginx + unicorn環境を作った時のメモ
なお、MacのOSはSierra ver 10.12.2
で行いました。
下記の記事を参考に、ほぼそのまま進めました。
Docker for Macを使ってRuby on Rails開発環境を構築する
Docker for Macをインストール
こちらからインストール
各種設定
Docker Composeの設定
コンテナ群を定義するdocker-compose.ymlを作成する
$ mkdir test
$ cd test
$ vi docker-compose.yml
test/docker-compose.yml
version: '2'
services:
rails:
container_name: rails
build: .
command: bundle exec unicorn -p 3000 -c config/unicorn.conf.rb
ports:
- '3000:3000'
environment:
RAILS_ENV: development
MYSQL_ROOT_PASSWORD: 'root'
DATABASE_URL: 'mysql2://root:root@mysql:3306'
depends_on:
- mysql
volumes:
- ./:/myapp
links:
- db
nginx:
container_name: nginx
build: containers/nginx
ports:
- '80:80'
depends_on:
- rails
volumes:
- ./containers_data/nginx:/var/log/nginx
links:
- rails
db:
container_name: mysql
image: mysql:5.6.32
environment:
MYSQL_ROOT_PASSWORD: 'root'
ports:
- '3306:3306'
volumes:
- ./containers_data/mysql:/var/lib/mysql
Dockerfileの設定
コンテナのビルド時に実行される処理を記載したDockerfileを作成する
- まずはメインのDockerfile(railsとmysql用)
$ vi Dockerfile
FROM ruby:2.3.1
RUN apt-get update && apt-get install -y mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN mkdir /var/lib/mysql && touch /var/lib/mysql/mysql.sock
ADD ./containers/mysql/my.cnf /etc/
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
EXPOSE 3000
- 次にnginx用のDockerfile
$ mkdir container
$ mkdir container/nginx
$ vi container/nginx/Dockerfile
FROM nginx:1.10.1
ADD nginx.conf /etc/nginx/nginx.conf
- コンテナにマウントされるnginx.confを設置(railsコンテナを3000番ポートでproxyするunicornのappサーバーを参照する設定)
$ vi test/container/nginx/nginx.conf
test/container/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name myapp;
root /myapp/public;
location / {
proxy_pass http://app_server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 404 /404.html;
error_page 500 502 503 504 /500.html;
location = /500.html {
root /myapp/public;
}
}
upstream app_server {
server rails:3000;
}
include /etc/nginx/conf.d/*.conf;
}
コンテナ作成、起動
ここで、参考記事から拝借したrailsプロジェクトの雛形をcloneしています。
主に下記の作業が行われていると思われます。
- unicornの設定
- mysqlデータベースの設定
- コンテナ内のデータ永続化用ディレクトリ
container_data
の設置
$ git clone git@github.com:mediba-moritake/docker-rails5.git
$ cd docker-rails5
$ docker-compose build
$ docker-compose run rails rails db:create
$ docker-compose up -d
確認
$ open http://127.0.0.1