13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker for Mac + Rails + nginx + unicorn

Last updated at Posted at 2018-01-31

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
13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?