Dockerを触り始めました2 - Docker Compose -

前回から Docker を触り始めました。
今回は、「Docker Compose」を調べつつ触ります。

目次

参考資料

後々追加されますが、入口はこの資料から。

今回はDocker-docs-ja Docker Composeを主に参考にして、最終的に Docker Compose を使用した Wordpress 環境の立ち上げをしてみたいと思います。

Docker Compose 導入

mac 環境では、docker 導入によって使用可能になっていた。
Qiita Docker を Mac にインストールするを参考参考にして、docker の導入をしたので、この通りでよいと思う。

インストール確認

1
docker-compose --version

コマンド

Docker Compose のコマンド群は、docker-Composeから始まる。
docker-Compose --helpでオプションを見ることができる。
とりあえず今回は以下しか使わなかった。

Docker Compose でアプリケーションを起動

docker-compose.ymlの内容に基づいて各コンテナを起動

1
2
3
4
5
6
7
docker-compose up
# -d
# バックグラウンド実行モード
docker-compose up -d
# -build
# docker-compose.ymlにbuildの記載があればイメージのビルドをすることになってるみたいだけど入れなくてもビルドした。
docker-compose up --build

コンテナ群の実行状況

1
docker-compose ps

docker container ls(docker ps)とは表示が異なる。

Docker Compose でアプリケーションを再起動

docker-compose.ymlの内容に基づいて各コンテナを再起動

1
docker-compose restart

Docker Compose でアプリケーションを停止

docker-compose.ymlの内容に基づいて各コンテナを停止

1
docker-compose down

Docker Compose を使ってみる。

docker-compose.yml

すごく難しいのですこれが…。
とりあえず、こういう時はシンプルに見よう見まねで 1 つだけサーバを立ててみます。
(オーケストレーションツールが泣くかな・・・。)

docker-compose.yml でコンテナを作成 一つだけ

以下のdocker-compose.ymlを作成してみる。

docker-compose.yml
1
2
3
4
5
6
version: "3"
services:
webserver:
image: nginx
ports:
- 80:80

docker-compose.ymlを作成したので、コンテナを作ってアクセスしてみる。

1
2
3
4
5
6
7
8
9
10
# コンテナ群(ここでは1つ)を起動
docker-compose up -d
# コンテナの状況確認
docker-compose ps

# ここでブラウザでlocalhostにアクセスし、
# "Welcome to nginx!"が表示さえていることを確認

# コンテナ群を停止
docker-compose down

できた。
Welcome to nginx!の表示を確認できる。


docker-compose.yml でコンテナを作成 二つそして build してみる

今度は、コンテナを 2 つを別の dokerfile でビルドされたイメージから作ってみたいと思います。
以下のディレクトリ・ファイル構成です。

1
2
3
4
5
6
7
8
--compose2
|--docker-compose.yml
|--server1
| |--dockerfile
| |--index.html
|--server2
|--dockerfile
|--index.html

dockerfile はそれぞれとも同じ内容ですが、
index.html の内容は server1 と server2 のそれぞれ変えておきます。

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3'
services:
webserver1:
build: ./server1
ports:
- 5000:80
webserver2:
build: ./server2
ports:
- 5001:80

```bash
# コンテナ群を起動
docker-compose up -d

# ここでブラウザでlocalhost:5000とlocalhost:5001にアクセスし、
# "それぞれのイメージに組み込んだindex.html"が表示さえていることを確認

# コンテナ群を停止
docker-compose down

アプリケーションを起動して、localhost:5000 と localhost:5001 にアクセスすると、それぞれの index.html を確認できた。


Wordpress 環境を作ってみる

Docker-docs-ja クイックスタート・ガイド:Docker Compose と Wordpressを参考に作ってみる。

一旦以下のサンプルそのまま入れてみる。

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: "2"
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress

こちらで、docker-compose up -dで起動してみる。
失敗した。
localhost:8000 にアクセスすると、Error establishing a database connectionと表示されるなぜなのかと、以下を調べてみる。

Docker-docs-ja クイックスタート・ガイド:Docker Compose と Wordpressdocker-compose.ymlとは結構違っている・・・。(日付古かったしな・・・。)

これらの資料を参考にdocker-compose.ymlを以下のように書き換えてみる。

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: "3"
services:
db:
image: mysql:5.7
volumes:
- ./.data/db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: adminwordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress

もう一度docker-compose up -dをするが、
うまくいかない。
気になって./.data/dbを一旦すべて削除。
docker-compose up -dし、localhost:8000 にアクセス。
成功!

wordpress の初期設定画面が開きました。
一旦docker-compose downで停止し、再度docker-compose up -dを実行し、再度アクセス。
データベースがホストマシンの./.data/dbに展開さ、wordpress の初期設定が表示されないこと確認。

ここで、もう一度docker-compose downし、./.data/dbを削除。
docker-compose up -dでコンテナ群を起動。
localhost:8000 にアクセスすると初期設定が表示、./.data/dbにデータが展開されていることを確認できた。


今回は、サンプルを参考に docker Compose を使って Wordpress 環境立ち上げまでやってみた。
ここまでで、「docker って便利だな」とか「今更かよ!」な感想を持ってしまったりしている。
docker hubに MQTT サーバーのeclipse-mosquittoの docker イメージを見つけたりしたので、IoT 的にも使いようがありそうだなと思う。
(mosca で拡張するのも、もうつらいなって)

こういうのものを使いこなして開発の本業の人たちは、本来作りたいアプリケーションだったり、サービスのコアになるべく早く着手しているんだろうなと理解。

ではでは。