Docker で簡単に複数サイトを立ち上げる
Docker を使って簡単に複数のサイトを立ち上げる方法を考えてみた。ここで言うサイトとは HTML で構成されるようなシンプルなページを想定していて、それぞれ別のドメインが割り振られているようなケースだ。
一般的には Nginx のような Web サーバーを立てて、その設定ファイルをいじることで複数サイトを公開できるようになる。Docker/非 Docker に関わらず、だ。
でも Nginx の設定ファイルをいじるのは、それなりに手間だ。
nginx-proxy という Docker イメージを使えばもっと簡単になるようだが、それでも初心者には難しそうだ。
GitHub - nginx-proxy/nginx-proxy: Automated nginx proxy for Docker containers using docker-gen
https://github.com/nginx-proxy/nginx-proxy
もっとシンプルな方法はないかと探してみたが、意外と情報がないので、考えてみた。
まず Docker で Nginx サーバーを立ち上げるには以下のようなコマンドを実行する。
$ sudo docker container run -d -p 8080:80 --name nginx --restart unless-stopped -v "/home/{user}/nginx:/usr/local/apache2/htdocs/" httpd
これで /home/{user}/nginx ディレクトリーに HTML ファイルを置けば、localhost:8080 でサイトにアクセスできる。
では追加で別のサイトを公開するにはどうすればいいか。通常は Nginx の設定ファイルを編集することになるだろう。
でも Docker なら新たにコンテナを立ち上げればいいだけだ。設定ファイルを編集するよりはるかに楽だ。
$ sudo docker container run -d -p 8081:80 --name nginx2 --restart unless-stopped -v "/home/{user}/nginx2:/usr/local/apache2/htdocs/" httpd
ポート番号、コンテナ名、ディレクトリー名を変えればいい。
サイトの数が増えるといちいちそれぞれのコンテナを起動するのは手間だが、それを解決するのが docker-compose だ。docker-compose は複数コンテナを簡単に管理できる。
以下のような docker-compose.yml を作成する。
services:
site1:
image: httpd
container_name: site1
ports:
- "8080:80"
restart: unless-stopped
volumes:
- "/home/{user}/nginx:/usr/local/apache2/htdocs/"
site2:
image: httpd
container_name: site2
ports:
- "8081:80"
restart: unless-stopped
volumes:
- "/home/{user}/nginx2:/usr/local/apache2/htdocs/"
以下のコマンドで起動。
$ sudo docker-compose up -d
公開用ポートを分けているので、Cloudflare Tunnel を使えば別々のドメインを割り振れるし、さらに SSL 接続になる。
docker-compose.yml を書き換えればどんどんサイトを追加できる。
参考:
気づいたらdocker-composeが色々変わっていた件 | 全国個人事業主支援協会
https://kojinjigyou.org/48322/
【中級者向け】「Docker compose」でサクッと複数のコンテナを一元管理する - DENET 技術ブログ
https://blog.denet.co.jp/centrally-manage-multiple-containers-with-docker-compose/
Docker Composeで複数コンテナ管理 - わくわくBank
https://www.wakuwakubank.com/posts/271-docker-docker-compose/
【超初心者】Docker を使用して自作 Web サイトを表示してみた - Qiita
https://qiita.com/sugurutakahashi12345/items/dc23dab2613b0e6103e8
この記事が気に入ったらサポートをしてみませんか?