ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【docker】httpsのwebサーバの立ち上げ方

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 オプションで証明書のパスを指定しています。