初めてのDocker利用-その2 ~作成済みコンテナの操作等~

2023/08/12に公開

今回の記事の内容は主に前の記事の続きで、以下の内容について書いていく。

  1. 作業用コンテナから抜ける方法
  2. 作業用コンテナの終了方法
  3. 作業用コンテナの起動方法
  4. 作業用コンテナの削除方法
  5. イメージのローカルリポジトリへの保存

ここで現在、コマンドラインは

作業用コンテナから抜ける方法

調べた結果だけまとめてしまうと以下の2つがある。

  • コマンドラインでexitを実行(コンテナが同時に終了される)
  • ctrl + p + qを実行する(コンテナが終了されることはない)

このうち、個人的にいいと思ったのは前者の方法である。後者の場合ショートカットキーの設定が必要なことがわかったためである。ただし、前者の方法では、なぜか私のパソコンではコンテナが終了されることはなかった。なぜだろう?

作業用コンテナの終了方法

Macのterminalで実行するコマンドの文法は以下のようになる。

$ docker stop [OPTIONS] CONTAINER [CONTAINER...]

今回の場合でいくと

$ docker stop ubuntu2310

を実行するとコンテナが終了することになる。ここで注意すべきポイントは上のコマンドを実行してから終了するまで10秒程度かかること。パソコンが故障したとかそういうわけではないので安心してください。docker ps -aコマンドでコンテナの状態を確かめると

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS     NAMES
fbd643fda14c   ubuntu:23.10            "/bin/bash"   25 hours ago    Exited (137) About a minute ago             ubuntu2310

となり、停止していることがわかる。

作業用コンテナの起動方法

まず先に実行するコマンドの文法を示す。

$ docker start [OPTIONS] CONTAINER [CONTAINER...]

今回の場合、

$ docker start ubuntu2310

を実行すればよく、これを実行後docker psコマンドでコンテナの状態を確かめると

$ docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS     NAMES
fbd643fda14c   ubuntu:23.10   "/bin/bash"   25 hours ago   Up 6 seconds             ubuntu2310

作業用コンテナの削除方法

まず先に実行するコマンドの文法を示す。

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

今回の場合、

$ docker rm ubuntu2310

を実行すればよく、これを実行後docker ps -aコマンドでコンテナの状態を確かめると

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS     NAMES

となり、削除されていることがわかる。
ここで注意したいのは作業用コンテナの削除はそのコンテナが停止している時のみ有効である。今回ubuntu2310を起動状態で削除しようとした時以下のようなエラーが出た。

Error response from daemon: You cannot remove a running container fbd643fda14cabc88f525f7f59cefb62e1cf8c84bf174e035dcf8393b4897a76. Stop the container before attempting removal or force remove

イメージのローカルリポジトリへの保存

ここではイメージをローカルリポジトリに保存する方法を書く。「初めてのDocker利用-その1」ではdockerイメージの取得からpythonの環境構築までの流れを書いたが、新しくコンテナを立ち上げて、同様のコンテナを作成するときにいちいちコマンドを実行していくというのは面倒である。イメージをローカルリポジトリに保存することで、このような場面での手間を省くことができるのである。
実行するコマンドの文法は

$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

である。今回具体的に実行するコマンドについて、コマンド文法のCONTAINERにはubuntu2310REPOSITORY[:TAG]にはsaved_image:1.1を代入した。これはコンテナubuntu2310

$ docker commit ubuntu2310 saved_image:1.1

となる。これを実行したのち、docker imageコマンドを実行すると、

$ docker iamges
REPOSITORY    TAG              IMAGE ID       CREATED          SIZE
saved_image   1.1              b53bd2ecdba7   25 seconds ago   174MB

と出力され、saved_image:v1.1がimageとして追加されていることがわかる。
試しに、今回作成したsaved_image:1.1イメージを利用してsaved_containerというコンテナを立ち上げる。以降は実行したコマンドである。

$ docker container run -itd --name saved_container saved_image:1.1
d58e78498fecb09a19557de0b681307212792628bacaab094cd567482b4d4f89
$ docker ps -a
CONTAINER ID   IMAGE                   COMMAND       CREATED          STATUS                       PORTS     NAMES
d58e78498fec   saved_image:1.1         "/bin/bash"   15 seconds ago   Up 14 seconds                          saved_container
$ docker comtainer exec -it saved_container /bin/bash
root@d58e78498fec:/# python3 --version
Python 3.11.4

以上を見てもらうと立ち上げたsaved_containerコンテナ内に入ってpythonのバージョンを確認するとPython 3.11.4と出力されており、pythonがすでに利用可能な状態になっていることがわかる。

今回の内容は以上です。最後まで読んでいただいてありがとうございました。

Discussion