[docker] Nginxを利用して1つのホストの複数のWEBサーバを構築する方法
サーバのリソースが余っていて、別のホストにWEBサーバを建てるのがもったいない場合、Dockerを使用すれば、複数の同じ種類のアプリを1つのホスト上に構築することができる
ただ、Dockerだけだと、80番ポートで待受けることができるWEBサービスは1つだけになってしまい、他のWEBサービスは8080番で待つという非常にユーザビリティの低い構成になってしまう。
アクセスしてきたURLによって、通信すべきWEBサービスを振分けるにはnginxをDocker上に構築すれば、すべてのWEBサービスは80番で待ち受けることができる。
目次
0.AWS LinuxにDockerをインストール
*AmazonLinux2023にDockerをインストールするにはこちら
AWS LinuxにDockerをインストールするには
amazon-linux-extras install docker
を打つだけ
もしRepositoryエラーがでる場合は、上記コマンドを打つ前にRepositoryを登録している可能性があるので、Repositoryを削除して上記コマンドを実行する
cd /etc/yum.repos.d/ rm docker-ce.repo
インストールが完了したら
systemctl start docker systemctl enable docker
で起動させる
念の為バージョンも確認しておく
docker --version
1.Docker Networkを構築
docker network create nginx-proxy
nginx-proxyというDocker Networkを構築して、DockerコンテナがこのNetworkを通じて相互通信できるようにする
2.nginx-proxyを構築
docker run -d -p 80:80 --name nginx-proxy --net nginx-proxy -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy
nginx-proxyをDockerコンテナとして構築し、待受ポートは80番としておく
またこれによりNginxがDocker Socketの状態を監視することで、ポートフォワーディングを行うことができるようになる
3.Virtual Host付きのWEBサービスのコンテナを構築
docker run -d --name blog --expose 80 --net nginx-proxy -e VIRTUAL_HOST=blog.DOMAIN.TLD wordpress
ここでは「blog.DOMAIN.TLD」というホスト名のWordpressを構築している
例:Dokuwikiを配置
docker run -d --name [名前] --expose 80 --net nginx-proxy -v /var/lib/docker/volumes/[ボリュームの名前]:/bitnami/dokuwiki -e VIRTUAL_HOST=[FQDN名] bitnami/dokuwiki:latest
4.DNSサーバにFQDNを登録
ホストのIPアドレスを叩いてもNginxはトラフィックをフォワードしてくれないので、先程設定したVirtualHostのFQDNをDNSサーバに登録する
参考URL:https://blog.ssdnodes.com/blog/host-multiple-websites-docker-nginx/