LoginSignup
0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Dockerfile】CMD で起動時にWebサーバーが起動する Python イメージをビルドする

Posted at

はじめに

この記事では、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/ にアクセスすると、ファイル一覧画面が表示されます。

image.png

Python コンテナを操作してWebサーバーとして利用できることが確認できたので、webコンテナを停止します。

docker container stop web

CMD インストラクションで Python コンテナをWebサーバーにする

次は Dockerfile でイメージを拡張します。コンテナ起動時のコマンドの指定は CMD インストラクションで行います。

CMD ["executable","param1","param2"]

先頭の "executable" がコマンド名で、それ以降が引数です。

"executable" はフルパスで書くことが推奨されています。
そのため、Dockerfile を書く前に python3 のコマンドのパスを確認しておきます。

docker container run python:3.12.4 which python3

image.png

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 .

image.png

my-python:web がビルドされたことを確認します。

docker image ls my-python

image.png

次はビルドしたイメージからコンテナを起動します。

docker container run `
--name web           `
--detach             `
--publish 8000:8000  `
my-python:web

ブラウザで http://localhost:8000/ にアクセスすると、先ほどと同じファイル一覧画面が表示されます。

image.png

参考

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0