前回は、hello-worldコンテナの動きを確認しました。今回は、コンテナの状態とdockerコマンドの対応についてまとめます。最初のうちは、用語が分かりづらいので、後に示す図を参照するとイメージが湧きやすくなると思います。

コンテナの状態と操作について

コンテナの状態とその状態における操作の観点を図に表してみます。コンテナには、大きくわけると3つの状態があります。その3つとは、

  • イメージ・・・ コンテナを作成する前の雛形
  • 実行中状態 ・・・コンテナを実行中状態
  • 停止中状態 ・・・停止状態、実行結果(プロセスの終了コード)、ログなども保持

です。こちらの状態を切り替えるための操作(docker コマンド)が提供されています。

コンテナの状態

ここからは、図で示したそれぞれの操作について、もう少し詳しく見ていきましょう。

(1) イメージを取得する

コンテナを作成するためには、予めイメージを取得する必要があります。イメージは、Docker Hubに代表されるようなパブリックリポジトリと、Dockerエンジン自身の中にあるローカルリポジトリがあります。イメージの取得する際のコマンドを示します。

$ docker pull centos

このコマンドを実行することで、ローカルリポジトリへイメージを取得します。大きなイメージやっカスタムのイメージ作成などで何度も同一のイメージを利用する場合には、runコマンドを実行前に実行しておくと、runコマンドが早く実行されます。

(2) コンテナを実行する

コンテナを実行するには、下記のコマンドで実行します。

$ docker run -it --name run_test centos bash  

このコマンドを実行した際は、(1)のように予め、イメージを取得した場合には、そのイメージからコンテナが作成されます。まだ、ローカルリポジトリにコンテナの元となるイメージが存在しない場合は、(1) イメージを取得するをDockerエンジンの中で自動に実行され、そのイメージを取得して、コンテナが実行されます。

オプションitについて

オプションとして指定したitは、iがキーボードの入力をコンテナの標準入力へリダイレクトし、tは、コンテナの疑似端末をターミナルに紐付けるという意味です。このオプションによって、ターミナルからコマンドを入力して、コンテナ自身を操作できるようになります。

コンテナ名について

コンテナ名については、--nameの後に指定します。こちらは、省略可能です。下記のようなコマンドで確認してみると、NAMESの部分に先程つけた名前が表示されていることがわかると思います。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e32f130d5cde        centos              "bash"              8 minutes ago       Up 8 minutes                            run_test

(3) コンテナを停止する

(2)で起動したコンテナを停止するには、別のターミナルから下記コマンドを実行します。

$ docker container stop run_test

こちらで、起動したコンテナが停止するはずです。run_testの部分は、コンテナ名、コンテナIDのどちらでも可能です。

プロセスが暴走していて、stopではとめられない場合には、killを利用します。

$ docker container kill run_test

プロセスをkillするコマンドになります。run_testの部分は、コンテナ名、コンテナIDのどちらでも可能です。

(4) コンテナを開始する

(3)で停止したコンテナを再度起動します。下記コマンドを実行します。

docker start -i run_test 

このコマンドでコンテナが再度起動すると思います。run_testの部分は、コンテナ名、コンテナIDのどちらでも可能です。

1 2 3