0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonスクリプトをDockerコンテナ化して、世界にこんにちは、する

Last updated at Posted at 2021-04-05

この記事の目的

Pythonで記述された"Hello World"スクリプトをPythonの実行環境とともにDockerコンテナ化して、Docker Engineがインストールされた環境であればHello Worldできるようにします。

何を始めるにもまずは世界にこんにちはしなきゃね('ω')。

実行環境

  • Windowsの仕様
    • エディション:Windows 10 Home
    • バージョン:20H2
    • OS ビルド:19042.867
    • エクスペリエンス:Windows Feature Experience Pack 120.2212.551.0
  • Docker Desktop
    • 3.2.2
  • Docker
    • 20.10.5 build 55c4c88

まずはPythonの開発環境を作成

ホストのWindows 10にPythonの実行環境を直接インストールしたくないし、せっかくDocker Desktopインストールしたので、Pythonの開発用イメージをダウンロードしてコンテナとして使用する。

なんだかんだでNumpy使うだろうし、Anacondaコンテナを使用することにする。(この辺はお好みで。)

今回は公式のanaconda3コンテナを使用することにした。

まずはDockerイメージを取得する。コマンドは次の通り。

PS> docker pull continuumio/anaconda3

Docker pullコマンドの詳細は公式サイトをご確認ください。

完了したらイメージが取得できたか、確認する。

PS> docker images
REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
continuumio/anaconda3   latest    5e5dd010ead8   4 months ago   2.71GB

(2.71GBもあった。もっと小さいイメージにすればよかった。)

次にDockerイメージからコンテナを作成します。Docker runコマンドを使用すると、イメージからコンテナの作成と実行を同時にやってくれます。こんな感じです。コマンドの引数の意味は公式ドキュメントをご参考ください。

PS > docker run --interactive --tty continuumio/anaconda3 bash
(base) root@a5a6df15c938:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
(base) root@a5a6df15c938:/# exit
exit
PS >

Docker runコマンドの公式ドキュメントはこちら。

ソースコードはホストのWindows 10のVisual Studio Codeを使いたいので共有フォルダをマウントします。
-vオプションでホストのパスとコンテナのパスを設定します。

PS > docker run --interactive -v C:\Users\<ユーザー名>\Development\docker:/mnt/docker --tty continuumio/anaconda3 bash
(base) root@c29714605d16:/# ls /mnt/
docker
(base) root@c29714605d16:/# ls /mnt/docker/

Python版Hello Worldの開発

PythonでHello Worldを開発します。今回のHwllo Worldは力作だ('ω')。

hello_world.py
# coding: UTF-8

print('Hello World!!')

Dockerコンテナ上で実行します。動いた。

(base) root@c29714605d16:/mnt/docker/python# python hello_world.py
Hello World!!
(base) root@c29714605d16:/mnt/docker/python#

実行用のDockerfileの作成

次に実行用のDockerイメージをビルドするためのDockerfileを作ります。Dockerfileのリファレンスを見て作成してください。

今回はこんな感じで作成しました。

Dockerfile
FROM python:3.9.4-slim-buster

WORKDIR /app

COPY ./hello_world.py /app

CMD ["python", "hello_world.py"]

一行ずつ見ていきましょう。

FROM python:3.9.4-slim-buster

この行はベースイメージを指定しています。開発用のanaconda3イメージは2.71GBもあり、配布用としては巨大すぎるのでpythonの公式コンテナから3.9.4を選びました。バージョンは適当です。もっと軽量な実行環境を選んでもよいと思います。今回のPythonスクリプトは外部モジュール呼び出しておりませんし。

WORKDIR /app

作業用のディレクトリをコンテナの中に作成します。このディレクトリのしたに実行スクリプトを実行させます。

COPY ./hello_world.py /app

ホストPCにある開発済みのHello Worldスクリプトをコンテナの作業用ディレクトリにコピーします。これはDockerfileからイメージをビルドするときに実行されるようです。

今回はDockerfileとhello_world.pyスクリプトが同じフォルダに保存されています。階層が異なる場合は適切に相対パスを設定してください。

PS > ls


    ディレクトリ: hello_docker


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2021/04/09     22:15            125 Dockerfile
-a----        2021/04/05     23:24             41 hello_world.py


PS >

CMD ["python", "hello_world.py"]

作成したPythonスクリプトを実行します。

Dockerイメージのビルド

Docker buildコマンドでDockerfileからイメージを作成します。詳しくは公式ドキュメントをご覧ください。

今回はこんな感じで作成しました。tagオプションでイメージ名を指定します。

PS > docker build --tag=helloworld .
[+] Building 23.6s (8/8) FINISHED
PS >

Dockerコンテナの作成と実行

作成したDockerイメージからコンテナを生成して実行します。

PS > docker run helloworld
Hello World!!
PS >

見事、世界にこんにちはできました。やったね!!!。これでDocker環境であればどこでも世界にこんにちはできるよ('ω')。

0
1
1

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?