Sasaki Peter

pharmaceutical programmer

DockerでDjango用のNginxサーバーを構築する

2019-03-25 sasaki peterdjango

ただの落書き。

FROM nginx:latest

こんなものを作ろうとしていた。

PC
仮想マシン
Webブラウザ
Nginxコンテナ
Djangoコンテナ
起動
TCP:80
localhost:8000
TCP:8001
WSGI
Django

docker-compose使うときは

upstream django{
    server_name web:8001
}

みたいにして、django.webでEXPOSE 8001とかすればいいけど、そうじゃないときはNginx/conf.d/default.conf

location / {
    proxy_pass http://hoge
}

みたいにしてコンテナ起動時に

$ docker run --name django.nginx --link django.web:hoge -p 8000:80 -d django.nginx

ってすればいいのかな?

そうでもなさそう。

upstream api{
    server api.com
}

とかって書いたら、これは

server {
    location / {
        proxy_pass http://api;
    }
}

これでupstreamの記述にアクセス、すなわちapi.comにアクセスされるということ。このserverの書き方はIP:PORTなのはいいのだが、あ、django.webコンテナのportを確認すればいいのか。

IPアドレスはexec -it hoge bashとかでコンテナ内から

$ hostname -i

ってやるか

$ docker inspect django.web | grep IP

とかってすれば見られそう。

docker-composeを使う場合は、compose upの度に、新しくコンテナが立てられ、その度にIPアドレスが変わってしまうので、docker-compose.ymlの中で定義したラベル?を用いて、

upstream hoge {
    server fuga:8001;
}

server {
    location / {
        proxy_pass http://hoge;
    }
}

のように書くことができる。コンテナのラベルから勝手にIPを取得できるというわけ。