Dockerコンテナを作成しPythonを追加しアプリを実行する

Dockerコンテナを作成しPythonを追加しアプリを実行してみます。

■環境

Windows10(DockerDesktopインストール済み)

docker version

Client:
Cloud integration: v1.0.22
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:44:07 2021
OS/Arch: windows/amd64
Context: default
Experimental: true

Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
Git commit: 459d0df
Built: Mon Dec 13 11:43:56 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0

■Dockerfileを作成する

Dockerコンテナを作成しPythonを追加しアプリを実行してみますが、その前にDockerfileを作成します。

作成するために今回は「C:\Users\user_(フォルダパス)」内に「new_test」という新しいフォルダを作成します。このフォルダ内に、私の場合は「新しいテキスト ドキュメント.txt」という新しいテキストを作成し、ファイル名を「Dockerfile」に変更し、作成します。

作成したDockerfileをコードエディタで開きます。

■コード

FROM python:3 
ADD test.py /
CMD ["python","./test.py"]

「FROM」は、今後の指示に取り組むためのベースイメージを設定・定義します。今回はPythonバージョン3が、ベースイメージレイヤーとして設定しています。

「ADD」は、ファイル及びディレクトリを指定されたソースから指定された宛先にコピーするための指示です。コピー元は、ローカルパスまたは外部URLです。

「CMD」は、コンテナ作成時に実行されるコマンドを設定します。Dockerは、1つのファイルにつき1つのCMD命令しか許可しない。今回はpythonでコピーされたtest.pyを実行するというものです。

この内容をDockerfileに記述し、保存します。

■スクリプトを作成する

保存後、今度はスクリプトを作成します。コードエディタを開きます。

■コード

x = eval("1 + 2")
print(x)
print("こんにちは、テストです。")

今回はxという変数を定義し、その中でeval()を用います。括弧内には引数,パラメータとして数式を渡します。これで計算結果が返され、x変数に格納されます。

格納後、print()でx変数内の情報を出力してみます。またprint()で日本語の文字列も出力してみます。

コードエディタでこのスクリプトを記述し「test.py」という名前で「C:\Users\user_(フォルダパス)」内の「new_test」に保存します。

■Dockerイメージを構築、作成する

保存後、Windows10のコマンドプロンプトを起動します。

>cd new_test

起動後、上記のコマンドを入力し、Enterキーを押します。今回作成したフォルダ「new_test」に移動します。

>docker build -t python-test:1.0 .

移動後、上記のコマンドを入力し、Enterキーを押します。これでイメージをビルドします。イメージ名は、「python-test」となります。また、この際にコロン”:”を用いて、今回はtagを「1.0」としておきます。

[+] Building 128.3s (7/7) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 94B                                                                                0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/python:3                                                        7.1s
 => [internal] load build context                                                                                  0.1s
 => => transferring context: 108B                                                                                  0.0s
 => [1/2] FROM docker.io/library/python:3@sha256:bef6fd726fb8825d5cf26933d8477505b14505be1a98394405c8840c1c266b  118.7s
 => => resolve docker.io/library/python:3@sha256:bef6fd726fb8825d5cf26933d8477505b14505be1a98394405c8840c1c266bdd  0.0s
 => => sha256:bef6fd726fb8825d5cf26933d8477505b14505be1a98394405c8840c1c266bdd 2.35kB / 2.35kB                     0.0s
 => => sha256:837b16f43b1dcb4cc05e351d3f6f05c07173f8b3a1bf0d4cc02a411e6eca1ea4 2.22kB / 2.22kB                     0.0s
 => => sha256:675cf548c64dd6e33fc62f34b57198ea3f58f8af04e859f6e04311826c31ee0d 8.53kB / 8.53kB                     0.0s
 => => sha256:bf168a6748997eb97b48cc86234b7ff7d8bc907645b9be99013158b3f146b272 5.16MB / 5.16MB                     8.0s
 => => sha256:e604223835ccf02d097187b5a58ca73e8598cadbb16a36202ca1943e97f56f1f 10.88MB / 10.88MB                   8.7s
 => => sha256:e756f3fdd6a378aa16205b0f75d178b7532b110e86be7659004fc6a21183226c 55.01MB / 55.01MB                  45.5s
 => => sha256:6d5c91c4cd86dde23108ab3af91e9eae838d0059a380ee7dfd4f370b6d985523 54.58MB / 54.58MB                  71.5s
 => => sha256:2cc8d88542628a7668ee653a4c00f2cfef5f9ea24f407227b6b63508c56eba3e 196.74MB / 196.74MB               104.6s
 => => sha256:2767dbfeeb87f9bd53889a475797724caee223dd3d9eb6b7e088ab6c24971b99 6.29MB / 6.29MB                    51.5s
 => => extracting sha256:e756f3fdd6a378aa16205b0f75d178b7532b110e86be7659004fc6a21183226c                          5.5s
 => => sha256:e5f27d860d894c7b60fd66c6523864a887d087ac83fbfdbe8de12dc253a507fa 19.73MB / 19.73MB                  63.8s
 => => extracting sha256:bf168a6748997eb97b48cc86234b7ff7d8bc907645b9be99013158b3f146b272                          0.5s
 => => extracting sha256:e604223835ccf02d097187b5a58ca73e8598cadbb16a36202ca1943e97f56f1f                          0.7s
 => => sha256:98a3e4f5f5ed4372c4be3a0ad5bc18e7fa9edbea635f893819064bc573f607dc 232B / 232B                        65.1s
 => => sha256:af265a3ad3e0ab3cb8471547a1b0ef547f1ef598107a31e7afebff3dadf69dac 2.87MB / 2.87MB                    67.5s
 => => extracting sha256:6d5c91c4cd86dde23108ab3af91e9eae838d0059a380ee7dfd4f370b6d985523                          5.6s
 => => extracting sha256:2cc8d88542628a7668ee653a4c00f2cfef5f9ea24f407227b6b63508c56eba3e                         10.9s
 => => extracting sha256:2767dbfeeb87f9bd53889a475797724caee223dd3d9eb6b7e088ab6c24971b99                          0.5s
 => => extracting sha256:e5f27d860d894c7b60fd66c6523864a887d087ac83fbfdbe8de12dc253a507fa                          1.3s
 => => extracting sha256:98a3e4f5f5ed4372c4be3a0ad5bc18e7fa9edbea635f893819064bc573f607dc                          0.0s
 => => extracting sha256:af265a3ad3e0ab3cb8471547a1b0ef547f1ef598107a31e7afebff3dadf69dac                          0.4s
 => [2/2] ADD test.py /                                                                                            2.2s
 => exporting to image                                                                                             0.1s
 => => exporting layers                                                                                            0.0s
 => => writing image sha256:d49294204d6a033d29e64346dbb4ae6afcb6ff6aaa9888a051090eabcbf32735                       0.0s
 => => naming to docker.io/library/python-test:1.0                                                                 0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

Enterキーを押すと、上記のメッセージが出力され、イメージの構築が完了となります。

■イメージを実行する(アプリをコンテナでホストする)

完了後、イメージを実行(アプリをコンテナでホスト)します。

>docker run python-test:1.0

コマンドプロンプト上で上記のコマンドを入力し、Enterキーを押します。

Enterキーを押すと、今回、作成したDockerfileに記載されている構成で、コンテナを稼働させ、スクリプト(test.py)を動かし、結果を出力させることができました。

コメント

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