CrescPia

Weekly Learning

今週の学びのメモです。

Docker ネットワークにホストも参加する

ホスト上で Web アプリを起動して nginx でリバースプロキシ

go 製の Web アプリを実行します。
専用の環境も必要なくコマンドとして実行するだけなので、このアプリは Docker を利用せずにホスト上で実行します。
そして Docker 上の nginx をリバースプロキシとして利用するのが目的です。

docker-compose

「compose_net」という名前のネットワークを作成しました。
nginx コンテナもこのネットワークに参加しています。
nginx の IP アドレスは 172.28.0.4 です。
ホストの IP アドレスは gateway で設定している 172.28.0.1 です。

services:
    nginx:
        container_name: nginx
        ports:
            - "443:443"
            - "80:80"

        ...
        networks:
            compose_net:
                ipv4_address: 172.28.0.4

networks:
    compose_net:
        driver: bridge
        ipam:
            config:
                - subnet: 172.28.0.0/16
                  gateway: 172.28.0.1

nginx

proxy_pass のところはホストの IP アドレスを指定しています。
また、起動している Web アプリのポートは 8899 です。

server {
    ...

    location / {
        proxy_pass http://172.28.0.1:8899/;
    }
}

ポートの許可

現在の許可ポートの確認

$ sudo ufw status

Web アプリのポートが 8899 なので、8899 を許可します。
許可するのは作成したネットワークからのアクセスに限定します。

$ sudo ufw allow from 172.28.0.0/16 to any port 8899

以下のような設定になりました。

$ sudo ufw status
Status: active

To                         Action      From                                                                             --                         ------      ----
OpenSSH                    ALLOW       Anywhere
8899                       ALLOW       172.28.0.0/16
OpenSSH (v6)               ALLOW       Anywhere (v6)