dockerを使って複数のWEBサーバーを立ててみたいと思います。
複数の外部ポートを使うため、プロキシとしてnginxと併用してみます。
今回は2つのWEBサーバーのコンテナを立て、1つにはwordpress on apache、もう一つは素のnginxを入れてみます。
コンテナにはそれぞれ
- memorycrat.cloudpack.jp
- tenkaippin.cloudpack.jp
というドメインを割り当てます。
また、sshも立ちあげます。
今回はDockerfileを使ってイメージを構築します。
それぞれのコンテナのDockerfileとsupervisorの設定ファイルテンプレートは以下の様にホスト側に配置しておきます。
$ tree . . └── templates ├── memorycraft │ └── conf │ ├── Dockerfile │ └── supervisor.conf └── tenkaippin └── conf ├── Dockerfile └── supervisor.conf
wordpressコンテナの設定
memorycraftコンテナでは、httpdとsshのサービスを立ちあげます。
また、wordpressをダウンロードし、RDSに接続するように設定ファイルを書き換えます。
./templates/memorycraft/conf/Dockerfile
./templates/memorycraft/conf/supervisor.conf
コンテナをビルドします。
docker build --no-cache --rm -t memorycraft/wordpress templates/memorycraft/conf/
できたら、起動します。
docker run -p 80 -p 22 -d memorycraft/wordpress /usr/bin/supervisord
nginxコンテナの設定
tenkaippinコンテナでは、nginxとsshのサービスを立ちあげます。
./templates/tenkaippin/conf/Dockerfile
./templates/tenkaippin/conf/supervisor.conf
コンテナをビルドします。
docker build --no-cache --rm -t tenkaippin/nginx templates/tenkaippin/conf/
できたら、起動します。
docker run -p 80 -p 22 -d tenkaippin/nginx /usr/bin/supervisord
ホスト側nginxの設定
まず、プロキシ用にnginxをインストールします。
# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm # yum install nginx -y
ここで一度コンテナの起動状況を調べてみます。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5499f267f670 tenkaippin/nginx:latest /usr/bin/supervisord About an hour ago Up About an hour 0.0.0.0:49185->22/tcp, 0.0.0.0:49186->80/tcp determined_shockley 9b361ac4aaef memorycraft/wordpress:latest /usr/bin/supervisord 5 hours ago Up 5 hours 0.0.0.0:49173->22/tcp, 0.0.0.0:49174->80/tcp loving_nobel
これで、
- memorycraft:80 → 49174
- tenkaippin:80 → 49186
というマッピングになっているのが分かります。(起動時にホスト側のIPを指定することも出来ます。)
次に、仮想サーバごとにプロキシ設定します。まずプロキシの基本設定です。
/etc/nginx/conf.d/proxy.conf
次に、仮想サーバーで、memorycraft.cloudpack.jpとtenkaippin.cloudpack.jpの設定をします。
プロキシの転送先ポートとして、先ほど調べたポートを指定します。
/etc/nginx/conf.d/virtual.conf
DNSの設定
次にRoute53で、2つのサブドメインでこのサーバーに向けたAレコードを登録します。
これで作業は完了です。
確認
それでは、SSH確認してみます。
memorycraft.cloudpack.jp
まずは、ホストサーバでssh接続してみます。
# ssh memorycraft@127.0.0.1 -p 49173 The authenticity of host '[127.0.0.1]:49173 ([127.0.0.1]:49173)' can't be established. RSA key fingerprint is a2:c9:81:fb:f5:84:57:ee:06:db:8b:18:7e:3c:2a:2e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[127.0.0.1]:49173' (RSA) to the list of known hosts. memorycraft@127.0.0.1's password: [memorycraft@9b361ac4aaef ~]$ [memorycraft@9b361ac4aaef ~]$接続出来ました。
次に、ブラウザを確認します。
おお!接続出来ました!
tenkaippin.cloudpack.jp
ssh接続してみます。
# ssh tenkaippin@127.0.0.1 -p 49175 ssh: connect to host 127.0.0.1 port 49175: Connection refused [root@ip-10-157-38-165 ~]# ssh tenkaippin@127.0.0.1 -p 49185 The authenticity of host '[127.0.0.1]:49185 ([127.0.0.1]:49185)' can't be established. RSA key fingerprint is c3:87:55:75:0b:d4:ce:f3:5c:0a:e9:71:e1:0f:fd:ca. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[127.0.0.1]:49185' (RSA) to the list of known hosts. tenkaippin@127.0.0.1's password: [tenkaippin@5499f267f670 ~]$ [tenkaippin@5499f267f670 ~]$接続出来ました。
ブラウザを見てみます。
ちゃんと表示されています!
このように、サーバー資源が限られていてユーザースペースを確実に分離したい場合などには、複数コンテナをつかうと便利かもしれません。
以上です。