みなさん、こんにちは。Startup.Tokyo Inc.の吉岡朗です。
前回の記事が意外に反響の多さでビックリしています。
Ⅰ.はじめに
今回は、今はやりのDockerについて基本的なところをおさえつつ、その発展形の1つを説明していきます。
まずは、Dockerの基本的な使い方は、このアカデミーで特集される形になっているおなじみの連載ものがあります。
Docker Tips 目次~Cloud ServerでDockerを使おう~
今回は、これらのDockerの発展形である、いろいろなDockerコンテナの中から、オーソドックであるWebサーバー&WordPressの構築を説明していきます。
Ⅱ.用意するもの、環境面の説明
今回は、GMOアカデミーより環境を提供いただきました。
サーバーのスペック、環境面は、以下の通りです。(執筆段階)
項目 | 内容 |
サーバースペック | GMOクラウド Altus Basicシリーズ CentOS7 |
テンプレート | CentOS 7.1.1503 64bit_20160223 |
サーバー | MiniServerタイプ |
IPアドレス | ***.***.***.***
テスト環境ですが、DNSに以下の名前に仮付与しました。 |
OSリリースバージョン | CentOS Linux release 7.1.1503 (Core) |
OSカーネルバージョン | Linux version 3.10.0-327.4.4.el7.x86_64 |
メモリ | 500MB |
CPUクロック | 1GHz |
Dockerバージョン | 1.10.3-44.el7.centos |
実行時には# yum updateにてアップデート済みです。
Dockerをインストールします。
Dockerのサービスを起動します。
Dockerをデーモンとして有効化します。
Ⅲ.フロントのDockerコンテナのインストール、立ち上げ
(1)Nginxコンテナを入れる
①フロントのDockerコンテナは、Dockerイメージからnginxを取得します。
【コマンドの説明】
項目 | 内容 |
docker | Dockerのコマンドです。 |
run | コンテナとして起動します。 |
-d | デーモンとして起動します。 |
-p 80:80 | ポート番号の対応関係を示します -p ホストのポート番号:コンテナ内部のポート番号 の関係です。 この場合は外部、内部コンテナはともにポート番号80を使うことを示します。 |
-v /var/run/docker.sock | /tmp/docker.sock:ホストの任意のパスをコンテナの任意のパスにマウントします。
-v ホストのパス:コンテナ内部のパス の関係です。 |
jwilder/nginx-proxy | コンテナのイメージ名になります。 |
②実行結果を確認します。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
010b77b3329b jwilder/nginx-proxy "/app/docker-entrypoi" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 443/tcp nginx
Ⅳ.バックエンドのDockerコンテナのインストール、立ち上げ
(1)シングルサイトとしてWordPressを入れてみる
①バックエンドのDockerコンテナとして、WordPressをイメージ取得から行います。
WordPressにはMySQLを使用しますが、今回は外部のMySQLを使用する例です。
あらかじめDNS設定にて、IPアドレス***.***.***.*** を test1.x1.hogehoge.com, test2.x1.hogehoge.com, test3.x1.hogehoge.comとマルチサイト用に割り当てておきます。
そして、バックエンドで立ち上げるときのコンテナは、環境変数 VIRTUAL_HOST=ドメイン名 にドメインすることで、dockerは割り振り先が分かります。
-e WORDPRESS_DB_HOST=db1.hogehoge.com \
-e WORDPRESS_DB_USER=hogetest1 \
-e WORDPRESS_DB_PASSWORD=hogehoge \
-e WORDPRESS_DB_NAME=hogetest2 \
-e WORDPRESS_TABLE_PREFIX=wp_ \
--name wordpress1 -d -p :80 wordpress
【コマンドの説明】
項目 | 内容 | |
1行目 | docker | Dockerのコマンドです |
run | コンテナとして起動します。 | |
-i -t | おまじないみたいなものです。 | |
-e VIRTUAL_HOST = test1.x1.hogehoge.com | 環境変数 VIRTUAL_HOSTを設定します。 | |
2行目 | -e WORDPRESS_DB_HOST = db1.hogehoge.com | 環境変数WORDPRESS_DB_HOSTを設定します。WordPressのMySQL接続用です。 |
3行目 | -e WORDPRESS_DB_USER = hogetest1 | 環境変数WORDPRESS_DB_USERを設定します。WordPressのMySQL接続用です。 |
4行目 | -e WORDPRESS_DB_PASSWORD = hogehoge | 環境変数WORDPRESS_DB_PASSWORDを設定します。WordPressのMySQL接続用です。 |
5行目 | -e WORDPRESS_DB_NAME = hogetest2 | 環境変数WORDPRESS_DB_NAMEを設定します。WordPressのMySQL接続用です。 |
6行目 | -e WORDPRESS_TABLE_PREFIX = wp_ | 環境変数WORDPRESS_DB_TABLE_PREFIXを設定します。WordPressのMySQL接続用です。 |
7行目 | --name wordpress1 | このコンテナの名前を設定します。 |
-d | このコンテナをバックグラウンドで起動します。 | |
-p :80: | ポート番号の対応関係を示します。-p ホストのポート番号:コンテナ内部のポート番号 の関係です。 この場合はホスト側のポート番号は固定でないポート番号、内部コンテナはポート番号80を使うことを示します。 |
|
wordpress | コンテナのイメージ名になります。 |
②実行結果を確認します。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
010b77b3329b jwilder/nginx-proxy "/app/docker-entrypoi" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 443/tcp nginx
3ce827959736 wordpress "/entrypoint.sh apach" 22 minutes ago Up 22 minutes 0.0.0.0:32769->80/tcp wordpress1
③稼働したかどうかをブラウザより確認することができます。
(2)マルチサイトとしてWordPressを入れてみる
マルチサイト用に立ち上げる場合には、以下の箇所に注意してください。
①ドメイン名
②WordPressのデータベース接続情報
③コンテナの名前
例1
-e WORDPRESS_DB_HOST=db1.hogehoge.com \
-e WORDPRESS_DB_USER=hogetest3 \
-e WORDPRESS_DB_PASSWORD=hogehoge \
-e WORDPRESS_DB_NAME=hogetest4 \
-e WORDPRESS_TABLE_PREFIX=wp_ \
--name wordpress2 -d -p :80 wordpress
例2
-e WORDPRESS_DB_HOST=db2.hogehoge.com \
-e WORDPRESS_DB_USER=hogetest5 \
-e WORDPRESS_DB_PASSWORD=hogehoge \
-e WORDPRESS_DB_NAME=hogetest6 \
-e WORDPRESS_TABLE_PREFIX=wp_ \
--name wordpress3 -d -p :80 wordpress
実行結果の確認
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
010b77b3329b jwilder/nginx-proxy "/app/docker-entrypoi" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, 443/tcp nginx
3ce827959736 wordpress "/entrypoint.sh apach" 27 minutes ago Up 27 minutes 0.0.0.0:32769->80/tcp wordpress1
33b8eb1c2ac5 wordpress "/entrypoint.sh apach" 23 minutes ago Up 23 minutes 0.0.0.0:32771->80/tcp wordpress2
ccd49e050af7 wordpress "/entrypoint.sh apach" 4 seconds ago Up 3 seconds 0.0.0.0:32772->80/tcp wordpress3
Ⅴ.付録
(1)執筆時点でのDockerのイメージサイズは以下の通りです。
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/wordpress latest ba0d4f420656 38 hours ago 429.5 MB
docker.io/jwilder/nginx-proxy latest b9debdc64b60 2 days ago 247.7 MB
(2)WordPressの多重起動について
DockerのWordPressコンテナを10個立ち上げた状態でも、CPU負荷、メモリ負荷などがありませんでした。(極端に立ち上げてみました。環境により異なります。)
今回のテスト環境はminiServerと呼ばれる、メモリが500MB、CPUクロック1GHzタイプで、立ち上げが可能でした。
通常WordPressのメモリ使用量が1コンテンツで50MBなら10個起動の段階で500MBを超えてOut of Memoryを起こして起動ができないはずですが、Dockerコンテナであるため起きないようです。
top - 19:05:08 up 1 day, 4:30, 2 users, load average: 1.85, 2.54, 1.66
Tasks: 303 total, 4 running, 299 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 491200 total, 6944 free, 229560 used, 254696 buff/cache
KiB Swap: 2097148 total, 1886388 free, 210760 used. 137440 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22875 root 20 0 313184 3540 3420 S 0.3 0.7 0:00.16 apache2
24522 root 20 0 159900 2128 1256 R 0.3 0.4 0:00.12 top
1 root 20 0 188856 1844 572 S 0.0 0.4 0:03.77 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.29 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a402b235c616 wordpress "/entrypoint.sh apach" 4 minutes ago Up 3 minutes 0.0.0.0:32784->80/tcp wordpress10
0060a8c52faf wordpress "/entrypoint.sh apach" 5 minutes ago Up 4 minutes 0.0.0.0:32783->80/tcp wordpress9
11d76ba47456 wordpress "/entrypoint.sh apach" 6 minutes ago Up 5 minutes 0.0.0.0:32782->80/tcp wordpress8
860a7b7c65ee wordpress "/entrypoint.sh apach" 6 minutes ago Up 6 minutes 0.0.0.0:32781->80/tcp wordpress7
371665d550c8 wordpress "/entrypoint.sh apach" 6 minutes ago Up 6 minutes 0.0.0.0:32780->80/tcp wordpress6
8572783f5a4a wordpress "/entrypoint.sh apach" 7 minutes ago Up 7 minutes 0.0.0.0:32779->80/tcp wordpress5
2df9460c7e5b wordpress "/entrypoint.sh apach" 7 minutes ago Up 7 minutes 0.0.0.0:32778->80/tcp wordpress4
ccd49e050af7 wordpress "/entrypoint.sh apach" 20 minutes ago Up 20 minutes 0.0.0.0:32772->80/tcp wordpress3
010b77b3329b jwilder/nginx-proxy "/app/docker-entrypoi" 25 minutes ago Up 25 minutes 0.0.0.0:80->80/tcp, 443/tcp nginx
33b8eb1c2ac5 wordpress "/entrypoint.sh apach" 43 minutes ago Up 43 minutes 0.0.0.0:32771->80/tcp wordpress2
3ce827959736 wordpress "/entrypoint.sh apach" 47 minutes ago Up 47 minutes 0.0.0.0:32769->80/tcp wordpress1