複数の手続きを定義ファイルを使って実行する Docker入門-8
Docker Composeは、あらかじめコンテナの起動豊富や、ネットワークの定義、ボリュームの定義などをYAML形式で書いた手続きファイルを読み込んでを実行するしくみである。
大型計算機で使われていたJCLのコンテナ版のようなもの。
いま、Wordpressサーバを立てる手順でこのDocker Composeを使ってみる
まずはDocker Composeを使わずに立ててみる
使用するコンテナは、
*Wordpress(httpd入り)
*Mysql
の2個。これにDBのデータを格納するボリュームが1個
※実際にはアップロードされた情報を格納する外部記憶をVolumeかBindでアタッチする必要があるが今は上記3個とする。
手順としては
1. 独自ネットワーク構築
2. ボリューム作成
3. Mysqlコンテナ作成・起動
4. Wordpressコンテナ作成・起動
という順序で作業するものとする。
$ docker network create wordpressnet $ docker volume create wordpress_db_volume $ docker container run --name wordpress-db -dit --mount type=volume,src=wordpress_db_volume,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=myrootpassword -e MYSQL_DATABASE=wordpressdb -e MYSQL_USER=wordpressuser -e MYSQL_PASSWORD=wordpresspass --net wordpressnet mysql:5.7 $ docker container run --name wordpress-app -dit -p 8080:80 -e WORDPRESS_DB_HOST=wordpress-db -e WORDPRESS_DB_NAME=wordpressdb -e WORDPRESS_DB_USER=wordpressuser -e WORDPRESS_DB_PASSWORD=wordpresspass --net wordpressnet wordpress
動作確認方法はブラウザで上記wordpressの管理画面に入り、動作することを確認する。
ここまで確認できたら一旦削除する。
$ docker container stop wordpress-app $ docker container stop wordpress-db $ docker container rm wordpress-app $ docker container rm wordpress-db $ docker volume rm wordpress_db_volume $ docker network rm wordpressnet
つぎにDocker Compose を使って実行してみる
Docker Composeのインストール
まずは Docker Compose をインストールするが、言語パッケージのpythonが必要なのでそれを最初にインストールする。
$ sudo apt install -y python3 python3-pip $ sudo pip3 install docker-compose ↑書籍ではこのように記述されていたが、 Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-c_36wcxj/cryptography/ というエラーが出たため、 $ sudo apt install docker-compose を実行した $ docker-compose --version docker-compose version 1.17.1, build unknown 少し古いようだがこれ進めてみる
作業用ディレクトリと定義ファイルの作成
作業用のディレクトリを作成する
$ cd $ mkdir wp $ cd wp
定義ファイルを作る。ファイル名称はデフォルト値の'docker-compose.yml'とする
内容は次の通り
version: "3"
services:
wordpress-db:
image: mysql:5.7
networks:
- wordpressnet
volumes:
- wordpress_db_volume:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: myrootpassword
MYSQL_DATABASE: wordpressdb
MYSQL_USER: wordpressuser
MYSQL_PASSWORD: wordpresspass
wordpress-app:
depends_on:
- wordpress-db
image: wordpress
networks:
- wordpressnet
ports:
- 8080:80
restart: always
environment:
WORDPRESS_DB_HOST: wordpress-db
WORDPRESS_DB_NAME: wordpressdb
WORDPRESS_DB_USER: wordpressuser
WORDPRESS_DB_PASSWORD: wordpresspass
networks:
wordpressnet:
volumes:
wordpress_db_volume:
ネストを間違えただけで構文エラーになるので注意する。ちなみにnetworks:の前にスペースをつけてネストするとエラーになる(おそらく直前のwordpress-app内の設定として理解しようとしたのだろう)
networks:の指定はなくてもよい。ない場合は、このcompose用のネットワーク(上記の場合wp_default)を作るので、上記と同等の動作をする。
docker-compose の実行
ymlファイルのあるディレクトリでdocker-composeを実行する
$ docker-compose up -d ←デタッチモード Creating network "wp_wordpressnet" with the default driver Creating volume "wp_wordpress_db_volume" with default driver Creating wp_wordpress-db_1 ... Creating wp_wordpress-db_1 ... done Creating wp_wordpress-app_1 ... Creating wp_wordpress-app_1 ... done
稼働状況を確認してみる
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
wp_wordpress-app_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp,:::8080->80/tcp
wp_wordpress-db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
コンテナ名称の前に作業ディレクトリ名がつけられる。
また、末尾の1は1つめのという意味で、scaleオプションをつけた場合は2,_3が生成される。
コンテナの停止と破棄
docker-composeから起動されたコンテナやボリュームはdockerコマンドで停止や削除が出来るが、管理上の反故が生じるのでdocker-composeコマンドで操作すべきである。
上記コンテナにブラウザでアクセスしてwordpressが正常に動作することを確認したらコンテナを停止して破棄する
$ docker-compose down Stopping wp_wordpress-app_1 ... done Stopping wp_wordpress-db_1 ... done Removing wp_wordpress-app_1 ... done Removing wp_wordpress-db_1 ... done Removing network wp_wordpressnet
ボリュームは削除されずに残っているので、次回起動時に使用することが出来る。
!!ただし、docker volume prune で消去されてしまうので要注意だ!!
$ docker volume ls DRIVER VOLUME NAME local f42f26184e4653d0210841a88de2b147e536242fe28c740dcb16dd308e308cf7 local wp_wordpress_db_volume
何か、ワークのボリュームが残ってしまうようだ・・・
docker-composeのオプションやコマンド
docker-composeコマンドの書式は
docker-compose オプション コマンド 引数
オプションはあまり使用することがない。引数はコマンドごとに異なる。
| コマンド | 説明 |
|---|---|
| up | コンテナを作成し起動する |
| down | コンテナ、ネットワーク、イメージ、ボリュームをまとめて停止し削除する |
| ps | コンテナ一覧を表示する |
| config | Composeファイルの確認と表示をする |
| port | ポートの割り当てを表示する |
| logs | コンテナの出力を表示する |
| start | サービスを開始する |
| stop | サービスを停止する |
| kill | コンテナを強制停止する |
| exec | コマンドを実行する |
| run | コンテナを実行する |
| create | サービスを生成する |
| restart | サービスを再起動する |
| pause | サービスを一時停止する |
| unpause | サービスを再開する |
| rm | 停止中のコンテナを削除する |
| build | サービス用のイメージを構築または再起動する |
| pull | サービス用のイメージをダウンロードする |
| scale | サービス用のコンテナの数を指定する |
| events | コンテナからリアルタイムにイベントを受信する |
| help | ヘルプ |
次の記事