日記

日本語の勉強のためのブログ

リバースプロキシで複数のコンテナに通信を振り分ける(+GoogleCloudを使ってみる)

チュートリアルをやってみた記録。勉強中なので表現に誤りがあればお知らせください。

やりたいこと

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