はじめに
この記事では、Dockerfile で起動時にWebサーバーが起動する Python イメージをビルドする手順について記載します。
Dockerfile の CMD
インストラクションへの理解促進の一環で行っています。
Nginx イメージや MySQL イメージは、デフォルトで各サーバーが起動します。一方、Python イメージは、デフォルトで対話シェルが起動します。そのため、今回は CMD
インストラクションを利用して、コンテナ起動時にWebサーバーが起動するようにします。
開発環境
開発環境は以下の通りです。
- Windows 11
- Docker Engine 26.1.1
- Python 3.12.4
ベースイメージとWebサーバー起動コマンド
今回のベースイメージは、2024年6月時点で latest タグと同等の 3.12.4 にします。
また、Webサーバー起動のためのコマンドは、python3 -m http.server
を利用します。
http.server
では、シンプルな静的ホスティングのみを行うWebサーバーを起動します。
docker container run
で Python コンテナをWebサーバーにする
Dockerfile でイメージを拡張する前に Python コンテナを操作してWebサーバーとして利用できるか確認します。
docker container run `
--name web `
--rm `
--detach `
--publish 8000:8000 `
python:3.12.4 `
python3 -m http.server
ブラウザで http://localhost:8000/ にアクセスすると、ファイル一覧画面が表示されます。
Python コンテナを操作してWebサーバーとして利用できることが確認できたので、webコンテナを停止します。
docker container stop web
CMD
インストラクションで Python コンテナをWebサーバーにする
次は Dockerfile でイメージを拡張します。コンテナ起動時のコマンドの指定は CMD
インストラクションで行います。
CMD ["executable","param1","param2"]
先頭の "executable"
がコマンド名で、それ以降が引数です。
Dockerfile を作成します。
FROM python:3.12.4
# CMD ["executable","param1","param2"]
CMD ["/usr/local/bin/python3", "-m", "http.server", "8000"]
上記 Dockerfile からイメージをビルドします。
docker image build --tag my-python:web .
my-python:web
がビルドされたことを確認します。
docker image ls my-python
次はビルドしたイメージからコンテナを起動します。
docker container run `
--name web `
--detach `
--publish 8000:8000 `
my-python:web
ブラウザで http://localhost:8000/ にアクセスすると、先ほどと同じファイル一覧画面が表示されます。
参考
関連記事