Python: Hit and BlowをDockerコンテナ化
PR

Python: Hit and BlowをDockerコンテナ化

くじらソフトウェア
記事内に広告が含まれています。
スポンサーリンク

コンテナはとても便利な技術です。コンテナの運用管理システムであるKubernetesが有名なことから、「運用のツールでしょ?開発エンジニアには関係ないよ」と思っているのであれば、考えを改めるべきでしょう。

Python学習ノート環境構築を行った際、Visual Studio Code Dev Containersを用いました。これは些細な例ですが、開発やテストを行う時にはとても強力な味方になってくれます。

今回は、Hit and BlowをDockerコンテナで動くようにしていきます。

スポンサーリンク
スポンサーリンク

Dockerfile を用意する

Dockerfileという名前のファイルが必要です。

非常に乱暴な言い方をすれば、「セットアップスクリプト」といった感じでしょうか。どのOS(Linuxだとディストリビューション)を使って、何をインストールして、どう設定するか、を記述します。

事前にやっておけること、例えばpipでライブラリをインストールするといったことはRUNに書いておきます。コンテナを起動したときの実行コマンドCMDに書いてしまうと、コンテナを起動してから実際にHit and Blowのプログラムが動き出すまで、時間がかかってしまいます。「事前にやれることはRUNで」やるようにすれば、コンテナをbuildするときに実行されます。

スポンサーリンク

コンテナのbuildと実行

コンテナをbuildするには、Dockerfileのあるディレクトリで

docker build -t hit-and-blow_docker .

とします。慣れないうちは最後の”.”を見落としがちです。

-t hit-and-blow_docker は付けなくてもいいですが、生成物に名前(tag)がつかないので、hash値で指定することになります。わかりにくいので、付けた方がいいでしょう。

buildのログはこんな感じです。

[+] Building 11.3s (9/9) FINISHED                                                                        docker:default
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 224B                                                                               0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/python:3.10-slim                                                0.0s
 => [1/4] FROM docker.io/library/python:3.10-slim                                                                  0.0s
 => [internal] load build context                                                                                  0.0s
 => => transferring context: 171B                                                                                  0.0s
 => CACHED [2/4] COPY templates/ /app/templates/                                                                   0.0s
 => CACHED [3/4] COPY main.py requirements.txt /app/                                                               0.0s
 => [4/4] RUN pip install -r /app/requirements.txt                                                                11.0s
 => exporting to image                                                                                             0.2s
 => => exporting layers                                                                                            0.2s
 => => writing image sha256:a8413d54c893ba48cf18fa2bc10ecda78fc35e1fb9a8321c52412dcfc6687f98                       0.0s
 => => naming to docker.io/library/hit-and-blow_docker                                                             0.0s

What's Next?
  View summary of image vulnerabilities and recommendations → docker scout quickview

最後の方にある”sha256:~”がhash値です。これで生成物(docker image)を識別できますが、見ても何のimageかわかりません。なので、-t で名前(tag)を付けましょう。

imageを起動させましょう。

docker run -p 5000:5000 hit-and-blow_docker

どのimageを起動させるのか、指定する必要があります。hash値でもtagでもいいです。

-p はポートマッピングです。Hit and Blow はFlaskのdefaultポートである5000でリクエストを受け付けるので、そのようにしています。ブラウザから

http://localhost:5000/

とアクセスすると、以前Web化したときと同じように遊べます。いや、遊べるようにmain.pyも少しだけ変更していますけど。

スポンサーリンク

テストを実行するときに有用

これだけだとあまりありがたみを感じないでしょうが、テストプログラムを書いて頻繁にテストするようになると、便利さを痛感します。

小さなプログラムでもテストを書く習慣をつけるといいんですけどね。テストの話はまたいつか。

タイトルとURLをコピーしました