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: ~
ファイルを作った場所によってはこんなエラーが出る場合があります。
右上のクジラアイコンをクリックして、「Preferences」
「File Sharing」でdocker-compose.ymlがある場所を追加しましょう。
終わったら「Apply & Restart」してしばらく待ちましょう。