docker で https の web サーバを立ち上げたのでその時のメモをここに残します。
構成
以下のようなファイル構成を作成します。
https-flask/ ├── app/ │ ├── app.py │ ├── static/ │ └── templates/ ├── certs/ ├── Dockerfile ├── requirements.txt └── docker-compose.yml
証明書作成
mkcert を使用してローカル開発用の証明書を作成します。
mkcert インストール
brew install mkcert
証明書作成
以下のコマンドで、localhost.pem (証明書) と localhost-key.pem (秘密鍵) が生成されます。
# certs ディレクトリに移動 cd https-flask/certs # mkcertを使って証明書作成 mkcert -install mkcert localhost
Flask アプリの作成
「app/app.py」に以下のコードを書き込みます。
from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, Python!" if __name__ == "__main__": app.run(host="0.0.0.0", port=443, ssl_context=( "/certs/localhost.pem", "/certs/localhost-key.pem" ))
必要なライブラリ
requirements.txt に以下を書き込みます。
flask
Dockerfile の作成
Dockerfile に以下を書き込みます。
FROM python:3.9-slim # 作業ディレクトリの設定 WORKDIR /app # 必要なパッケージをインストール COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt # アプリケーションのコピー COPY app /app COPY certs /certs # ポート開放 EXPOSE 443 # Flaskアプリケーションの起動 CMD ["python", "app.py"]
docker-compose.yml の作成
docker-compose.yml に以下を書き込みます。
version: "3.9" services: web: build: . ports: - "443:443" volumes: - ./certs:/certs - ./app:/app
実行手順
Docker イメージビルド
docker-compose build
コンテナ起動
docker-compose up
動作確認
ブラウザで https://localhost にアクセスします。Hello, Python! と表示されれば成功です。
メモ
- 初回アクセス時にブラウザが「信頼されていない証明書」と警告する場合があります。ローカル開発用の証明書なので、「許可する」などを選択します。
- Flask の ssl_context オプションで証明書のパスを指定しています。