神戸学院大学 経営学部 林坂ゼミ

Docker 入門トップページ

« 戻る 次へ »

Docker 入門

Docker はじめの一歩

Docker で Python 実行環境の構築

次は,Python の実行環境を Docker で構築してみましょう.Python のバージョンに 3.13 を指定してイメージから実行環境を構築します.このとき -it オプションは -i がコンテナの標準出力を開き,-t で tty(端末デバイス)を確保するという意味になります.また,bash はコンテナで実行するコマンドです.つまり,次のコマンドでコンテナの端末に接続されることになります.結果の最後にプロンプトが表示されてコマンドの入力状態になっていることに注意してください.なお,root は UNIX/Linux 環境における管理者のユーザ名です.

% docker run -it python:3.13 bash ⏎
Unable to find image 'python:3.13' locally
3.13: Pulling from library/python
d1e404420307: Pull complete
9923852056eb: Pull complete
7bcc8bff74cb: Pull complete
997d2d68e2fc: Pull complete
b8022fef72bf: Pull complete
7e583365591e: Pull complete
44bad67af72c: Pull complete
Digest: sha256:b41c4877ed4d8a4d6e04f0b341b84f2bd384325816975b1ebf7a2f2e02b7acaa
Status: Downloaded newer image for python:3.13
root@25de3f427188:/# 

ルートディレクトリがカレントディレクトリになっています.ルートディレクトリにあるファイルやディレクトリの一覧を確認します.ls コマンドの詳細はこちらで確認してください.

root@25de3f427188:/# ls ⏎
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@25de3f427188:/#

次に echo コマンドで文字列を画面に表示しますが,その結果を画面ではなくファイルにリダイレクトします.

root@25de3f427188:/# echo "print('hello docker')" > hello.py ⏎
root@25de3f427188:/#

ファイル (hello.py) が作成されたことを確認します.

root@25de3f427188:/# ls ⏎
bin  boot  dev  etc  hello.py  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@25de3f427188:/#

python コマンドを使って hello.py を実行します.

root@25de3f427188:/# python hello.py ⏎
hello docker
root@25de3f427188:/#

次に,Python のインタプリタを起動します.インタプリタの中で変数 a に値を代入し,その変数の中身を表示します.その後,exit() で Python のインタプリタを終了します.最後に exit コマンドでコンテナからログアウト(同時にコンテナを終了)します.

root@25de3f427188:/# python ⏎
Python 3.13.7 (main, Aug 15 2025, 22:58:00) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 10 ⏎
>>> print(a) ⏎
10
>>> exit() ⏎
root@25de3f427188:/# exit ⏎
exit
%

ローカル環境にダウンロード済みの Docke のイメージを一覧で表示します.

% docker image ls ⏎
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
python        3.13      5c5a62077b3b   3 weeks ago   1.12GB
hello-world   latest    ca9905c726f0   4 weeks ago   5.2kB

起動中のコンテナを一覧で表示しますが,起動中のコンテナは存在しません.

% docker container ls ⏎
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

終了したコンテナも含めてすべてのコンテナを一覧で表示します.ここで sleepy_germain というコンテナは python:3.13 というイメージから生成されており,vigilant_curielucid_mayer というコンテナはイメージ hello-world から生成されていることに注意してください.

% docker container ls -a ⏎
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
25de3f427188   python:3.13   "bash"     50 minutes ago   Exited (0) 5 minutes ago              sleepy_germain
81436562b438   hello-world   "/hello"   51 minutes ago   Exited (0) 7 minutes ago              vigilant_curie
5ff2bd0fdf0d   hello-world   "/hello"   54 minutes ago   Exited (0) 10 minutes ago             lucid_mayer

もう一度,イメージ python:3.13 からコンテナを新規に構築します.作成されたコンテナは上の作業で作成したコンテナとは別のコンテナであることから,上の作業で作成した hello.py というファイルは新たなコンテナには存在しないことに注意してください.

% docker run -it python:3.13 bash ⏎
root@3ca043d750df:/# ls ⏎
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@3ca043d750df:/# exit ⏎
exit

コンテナの一覧を確認します.イメージ python:3.13 から生成されたコンテナが2個あることが確認できました.

% docker container ls -a ⏎
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
3ca043d750df   python:3.13   "bash"     19 seconds ago   Exited (0) 6 seconds ago              sad_newton
25de3f427188   python:3.13   "bash"     51 minutes ago   Exited (0) 50 minutes ago             sleepy_germain
81436562b438   hello-world   "/hello"   52 minutes ago   Exited (0) 52 minutes ago             vigilant_curie
5ff2bd0fdf0d   hello-world   "/hello"   55 minutes ago   Exited (0) 55 minutes ago             lucid_mayer

上の作業ではイメージからコンテナを新規に作成していました.次は,作成済みで終了したコンテナを再び起動し,そのコンテナをアタッチして /bin/bash にログインします.まず,コンテナの一覧を確認します.hello.py を作成した sleepy_germain コンテナがあることを確認します(実際の名前はコンテナを作成するたびに異なるのでその名前を確認してください).

% docker container ls -a ⏎
CONTAINER ID   IMAGE         COMMAND    CREATED              STATUS                          PORTS     NAMES
3ca043d750df   python:3.13   "bash"     About a minute ago   Exited (0) About a minute ago             sad_newton
25de3f427188   python:3.13   "bash"     52 minutes ago       Exited (0) 51 minutes ago                 sleepy_germain
81436562b438   hello-world   "/hello"   53 minutes ago       Exited (0) 53 minutes ago                 vigilant_curie
5ff2bd0fdf0d   hello-world   "/hello"   56 minutes ago       Exited (0) 56 minutes ago                 lucid_mayer

コンテナ sleepy_germain を起動するには docker start コマンドを利用します.

% docker start sleepy_germain ⏎
sleepy_germain

起動中のコンテナの一覧を確認すると sleepy_germain コンテナが起動中であることが分かります.

% docker container ls ⏎
CONTAINER ID   IMAGE         COMMAND   CREATED          STATUS         PORTS     NAMES
25de3f427188   python:3.13   "bash"    53 minutes ago   Up 9 seconds             sleepy_germain

コンテナにアタッチして /bin/bash にログインします.

% docker exec -it sleepy_germain /bin/bash ⏎
root@25de3f427188:/#

ls コマンドで hello.py があることを確認し,そのファイルを実行します.最後にコンテナからログアウトします.

root@25de3f427188:/# ls ⏎
bin  boot  dev  etc  hello.py  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@25de3f427188:/# python hello.py ⏎
hello docker
root@25de3f427188:/# exit ⏎
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug sleepy_germain
    Learn more at https://docs.docker.com/go/debug-cli/

/bin/bash からログアウトしましたが,コンテナ自体はまだ起動中であることが分かります.

% docker container ls ⏎
CONTAINER ID   IMAGE         COMMAND   CREATED          STATUS          PORTS     NAMES
25de3f427188   python:3.13   "bash"    54 minutes ago   Up 57 seconds             sleepy_germain

docker container stop コマンドでコンテナを終了させます.

% docker container stop sleepy_germain ⏎
sleepy_germain

起動中のコンテナがなくなったことが分かります.

% docker container ls ⏎
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

終了したコンテナも含めてすべてのコンテナを一覧で確認します.直前(6秒前)に sleepy_germain コンテナが終了していたことが確認できました.

% docker container ls -a ⏎
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                       PORTS     NAMES
3ca043d750df   python:3.13   "bash"     3 minutes ago    Exited (0) 3 minutes ago               sad_newton
25de3f427188   python:3.13   "bash"     54 minutes ago   Exited (137) 6 seconds ago             sleepy_germain
81436562b438   hello-world   "/hello"   55 minutes ago   Exited (0) 55 minutes ago              vigilant_curie
5ff2bd0fdf0d   hello-world   "/hello"   58 minutes ago   Exited (0) 58 minutes ago              lucid_mayer