メモ > サーバ > 各論: Docker > Docker Compose
Docker Compose
docker container run で起動する場合、一度に起動すべきコンテナの数が多くなると管理しづらくなるので、Docker Compose で管理するといい
これなら依存管理の手間が無くなり、さらに起動コードや関連ファイルを丸ごとGitで管理することもできる
当初はシェルスクリプトを作成するなど独自に対応する必要があったが、
公式に手順が用意されたので人によっての方法の差異を防げるようになった
docker-composeを使うと複数コンテナの管理が便利に - Qiita
https://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce
検証時の docker-compose.yml のバージョンは3だったので、「version: '3'」と指定している
必要に応じて「version: '3.8'」などバージョンを指定する
Compose ファイル | Docker ドキュメント
https://matsuand.github.io/docs.docker.jp.onthefly/compose/compose-file/
■ファイルの準備
C:\Users\refirio\docker\ 内に以下を作成するとする
(PHP+MySQLの環境を作る例)
compose_test\html\index.php
<?php phpinfo() ?>
compose_test\docker\mysql\my.cnf
[mysqld]
character-set-server=utf8
compose_test\docker-compose.yml
version: '3'
networks:
my_network:
services:
mysql:
container_name: mysql
volumes:
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: test
networks:
- my_network
image: mysql:5.7
php:
container_name: php
volumes:
- ./:/var/www
ports:
- 80:80
networks:
- my_network
image: php:custom
■起動
各ファイルを用意できたら以下で起動する
$ cd docker/compose_test
$ docker-compose up … docker-compose.ymlをもとに起動
画面にログが表示される。以下でストップした
mysql | Version: '5.7.35' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
しばらく時間をおいてからブラウザから http://127.0.0.1/ にアクセスすると画面が表示され、以下のようなアクセスログが表示された
php | 192.168.99.1 - - [16/Dec/2017:08:56:09 +0000] "GET / HTTP/1.1" 200 24541 "-" "Mozilla/5.0 以下略
Ctrl+C で終了できるが、コンテナも終了される
「docker container exec -it php bash」のように接続したければ、バックグラウンドで起動する必要がある
■起動(バックグラウンド)
$ cd docker/compose_test
$ docker-compose up -d … docker-compose.ymlをもとにバックグラウンドで起動
$ docker container ls … コンテナを確認
$ docker container exec -it php bash … phpコンテナのターミナルに接続
# exit
$ docker container exec -it mysql bash … mysqlコンテナのターミナルに接続
$ mysql -u root -p … testデータベースを作成する場合
mysql> CREATE DATABASE test;
mysql> QUIT;
# exit
docker/compose_test/code(/var/www/html)内に適当なデータベース管理ツールを設置し、テーブルを作成&データ登録&表示をテスト
http://www.php-labo.net/download/new/db_admin/ の場合、以下の接続情報でアクセスできた
define('HTTP_URL', 'http://127.0.0.1/db_admin/');
define('ADMIN_PASSWORD', '1234');
define('DATABASE_TYPE', 'mysql');
define('DATABASE_HOST', 'mysql');
define('DATABASE_PORT', '');
define('DATABASE_USER', 'root');
define('DATABASE_PASSWORD', 'pass');
define('DATABASE_CHARSET', '');
define('DATABASE_NAME', 'test');
$ docker-compose down … コンテナを終了
$ docker container rm -f $(docker container ls -a -q) … 「docker rm」でも終了できる