EC2インスタンスに2つのサービスを稼働する。
8000:80
で稼働しているhttpdコンテナ8001:80
で稼働しているnginxコンテナNginxをプロキシサーバとして以下のように転送する。
/foo
のときはhttpdコンテナに転送/bar
のときはnginxコンテナに転送httpdコンテナをポート8000番で稼働する。
$ sudo docker run -itd -p '8000:80' httpd:latest
nginxコンテナをポート8001番で稼働する。
$ sudo docker run -itd -p '8001:80' nginx:latest
$ sudo docker run -itd -p '80:80' --name proxy nginx
Dockerfile
FROM nginx:1.19
# @see https://qiita.com/shin-go/items/6cb4824944ddffb6e6a7
COPY ./default.conf /etc/nginx/templates/default.conf.template
※ etc/nginx/templates/default.conf.template
については以下を参照。
docker上のnginx.confに環境変数を適用する方法
default.conf
server {
server_name localhost;
root /var/www/html/public;
listen 80;
location /foo {
proxy_pass http://10.3.0.183:8000/;
proxy_redirect off;
}
location /bar {
proxy_pass http://10.3.0.183:8001/;
proxy_redirect off;
}
}
10.3.0.183
はホスト
のプライベートIPアドレス。
host.docker.internal
はLinuxでは使用できないためホスト
のIPアドレスを使用している。
bridge
)にあるのでdefault.confのproxy_pass
は、おそらくhttp://172.17.0.2:8000
、http://172.17.0.3:8001
でもアクセス可能なはず(要確認)ホスト
のプライベートIPアドレスを指定する必要があるはず(アクセスできることを確認)$ sudo docker network inspect bridge
[
{
"Name": "bridge",
// ...
"Scope": "local",
"Driver": "bridge",
// ...
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
// ...
"Containers": {
"29e8b1a4bbb3203ec01cd8261b59585f4a275c8ea0b027be822367854ba261d0": {
"Name": "apache",
"EndpointID": "21f79415fd127ad303de189a19cccdc3c64f9597e0d0096b4ef19e79ab0064e8",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"a5c1e347df768cf30cad553f12287257cadb78718252c45b6e4e0e22de20aa2d": {
"Name": "proxy",
"EndpointID": "22eb2680df113fbb2292efb22ad4225d30c3e3d8ffb6a31f4f8ce41fb3241972",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
},
"f5d183deb326c975d275d0b5145aa7b940dc7feeed0f1a0e3307f0a91ce24451": {
"Name": "nginx",
"EndpointID": "0e80bb9b77767cdd4fe3b0e7e9bb310611ad6db5cb658ecca1a55cb7c87bb576",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
}
},
// ...
}
]