前回は、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のどちらでも可能です。