[Docker] 環境変数

nginxをリバースプロキシとして使用する
リバースプロキシーはロードバランサの一種で、クライアントからのアクセスを別のサーバに転送する

### 環境変数を使ったイメージのパラメーター
環境変数はシステムやアプリのパラメータを設定するもので、「キーとバリュー」の形式で管理されている。

アプリサーバー: 表示するメッセージ、ポート番号
リバースプロキシー: アプリサーバーのアドレス、待ち受けポート

pythonではosモジュールのenviron変数を使うことが一般的

server.py

import os, flask
MESSAGE = os.environ['MESSAGE']
PORT = int(os.environ['PORT'])

app = flask.Flask('c2env1_app')
@app.route('/')
def index():
	return MESSAGE

app.run(debug=True, host='0.0.0.0', port=PORT)

$ sudo docker run –name c2env1_app_base -d python:3.7.5-slim tail -f /dev/null
$ sudo docker exec c2env1_app_base pip install flask==1.1.1
$ sudo docker cp server.py c2env1_app_base:/
$ sudo docker stop c2env1_app_base
$ sudo docker commit c2env1_app_base c2env1_app
$ sudo docker run –name c2env1_app -p 8081:80 -d \
-e MESSAGE=”Hello Docker Env” -e PORT=80 \
c2env1_app python -u /server.py

nginx.tpl

events {
	worker_connections
}
http {
	server {
		server_name localhost:
		listen {{PORT}};
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr
		proxy_set_header X-Forwarded-Host $host
		proxy_set_header X-Forwarded-Server $host
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		location / {
			proxy_pass {{APP_SERVER}};
		}
	}
}

start.sh

#!/bin/sh
sed -e "s/{{PORT}}/$PORT/g" /etc/nginx/nginx.tpl > /etc/nginx/nginx.conf
sed -i -e "s^{{APP_SERVER}}^$APP_SERVER^g" /etc/nginx/nginx.conf
exec nginx -g "daemon off;"

$ sudo docker run –name c2env1_web_base -d nginx:1.17.6-alpine tail -f /dev/null
$ sudo docker cp start.sh c2env1_web_base:/
$ sudo docker exec c2env1_web_base chmod +x /start.sh
$ sudo docker cp nginx.tpl c2env1_web_base:/etc/nginx/
$ sudo docker stop c2env1_web_base
$ sudo docker commit c2env1_web_base c2env1_web

$ sudo docker run –name c2env1_web -p 8080:80 -d \
-e APP_SERVER=”http://172.17.0.2:80″ -e PORT=80 \
c2env1_web /start.sh

この様にも書ける
.env

APP_SERVER="http://172.17.0.2:80"
PORT=80

$ sudo docker run –name c2env1_web -p 8080:80 -d \
–env-file .env c2env1_web /start.sh

.envに変数入れて、–env-file .envでコマンド打てば、環境変数として扱えるのね。
これ凄いわ… ガチでビビるレベルや…