チュートリアルをやってみた記録。勉強中なので表現に誤りがあればお知らせください。
やりたいこと
Dockerを用いて複数のWebサーバを立て、
http://<サーバIP>/web1
→ webサーバ1にルーティングされるhttp://<サーバIP>/web2
→ webサーバ2にルーティングされる
のような環境を構築したい。
いくつか方法はあるようだが、NginXのリバースプロキシ機能を用いて実現した例があったため、それに沿って試してみる。
また物理サーバが手元にないため、GoogleCloudを用いてサーバを用意してみる。
GoogleCloudでサーバを用意
無料枠を使う。次の記事を見て用意する。今回はUbuntu22.04を使った。
https://zenn.dev/taksas/articles/1f8e0f3676628d
※VM作成時に80, 443番ポートを開けておく。
できたらSSH接続。"VM instances"の先ほど作成したVMの項にある"SSH"をクリックすると、ブラウザからSSH接続してサーバの操作が可能。
dockerを入れる
公式サイトの通り。
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
インストールできたかテスト。
sudo docker run --rm hello-world # delete the image sudo docker image rm hello-world
リバースプロキシを使ってみる
いいチュートリアル記事があったのでそれに沿って試す。
git clone https://github.com/zawakin/reverse-proxy.git
cd reverse-proxy/
Ubuntuでもdocker.host.internal
を使用できるようにdocker-compose.override.yaml
を追加する。
参考:https://qiita.com/skobaken/items/03a8b9d0e443745862ac
version: "3" # docker-compose.yamlのバージョンと合わせる services: reverse-proxy: # host.docker.internalを使用したいサービス名 extra_hosts: - "host.docker.internal:host-gateway"
そしたらコンテナを立ち上げる。
sudo docker compose up -d
この状態でブラウザを開き、
http://<サーバIP>/dog
:犬好きのページが表示されるhttp://<サーバIP>/cat
:猫好きのページが表示されるhttp://<サーバIP>:7000/
:アクセス不可http://<サーバIP>:7001/
:アクセス不可
となれば成功。
ちゃんと7000, 7001番ポートもふさがっている。
$ nmap 34.145.84.46 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-21 12:37 JST Nmap scan report for XXX.bc.googleusercontent.com (<サーバIP>) Host is up (0.10s latency). Not shown: 996 filtered tcp ports (no-response) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp closed https 3389/tcp closed ms-wbt-server