Docker環境構築(Rails)①

入門~インストールはこちら
devdevdev.hatenablog.com

DockerとDocker-Compose

Dockerはコンテナの管理
Dockerfileで色々管理

Docker-Composeは複数のコンテナの管理
docker-compose.ymlで色々管理
Docker-Composeで環境を作るコンテナの内容によってはDockerfileは不要

くらいに覚えておけば十分かと。

構築する環境

App(Ruby 2.5.1) - アプリケーションサーバ
MySQL 5.7.21 - DB
Nginx 1.13.10 - Webサーバー
phpMyAdmin - 何かと便利
Redis 3.2.11 - KVS



ファイル構成

- app/
- docker-compose.yml
- docker/
    - app/
        - Dockerfile
    - mysql/
        - conf.d/
            - custom.cnf
    - nginx/
        - app.conf

docker/配下のファイルの用意

App

Dockerfileを用意

FROM ruby:2.5.1

ENV APP_ROOT /var/www/app
WORKDIR $APP_ROOT
MySQL

Dockerfileは不要。
mysql/conf.d/custom.cnfを用意しましょう。

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

[mysqld_safe]
timezone = UTC
Nginx

Dockerfileは不要
nginx/app.confを用意しましょう。

server {
    listen 80 default_server;
    index index.php index.html index.htm;
    root /var/www/app;
}
phpMyAdmin

Dockerfileも何もいりません。

Redis

Dockerfileも何もいりません。



docker-compose.ymlの作成

version: '2'
services:
  app:
    build:
      context: .
      dockerfile: ./docker/app/Dockerfile
    volumes:
      - ./app:/var/www/app
    ports:
      - 3000:3000
    depends_on:
      - mysql
      - redis
  mysql:
    image: mysql:5.7.21
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: app
    ports:
      - 3306:3306
    volumes:
      - ./docker/mysql:/etc/mysql/conf.d
  nginx:
    image: nginx:1.13.10
    ports:
      - 80:80
    volumes_from:
      - app
    volumes:
      - ./app:/var/www/app
      - ./docker/nginx:/etc/nginx/conf.d
    depends_on:
      - app
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=password
    links:
      - mysql
    ports:
       - 8080:80
  redis:
    image: redis:3.2.11
起動してみる
$ docker-compose up

・エラーが表示されない
http://localhost/にアクセスしてNginxの404が表示される
http://localhost:8080/にアクセスしてphpMyAdminが表示される
のが確認できれば完了。停止はControl + cで。
アプリケーションの用意は次回やります。



Trouble shooting
ERROR: for mysql  Cannot start service mysql: b'Mounts denied: ~

ファイルを作った場所によってはこんなエラーが出る場合があります。

f:id:devdevdev:20180404003130p:plain
右上のクジラアイコンをクリックして、「Preferences」

f:id:devdevdev:20180404003143p:plain
「File Sharing」でdocker-compose.ymlがある場所を追加しましょう。
終わったら「Apply & Restart」してしばらく待ちましょう。