サイトアイコン APPSWINGBY Developers Blog

Docker入門 #5 コンテナの状態とよく使うコマンドについて

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

(5) コンテナの中身を確認する

コンテナの状態とログの取得は、よく利用するので紹介します。まずは、プロセスを確認する方法です。

プロセスを確認する

$ docker container ps -a                                                                               
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
e32f130d5cde        centos              "bash"              30 minutes ago      Exited (0) 2 seconds ago                       run_test

オプションaについて

停止状態のものも表示するためのオプションになります。run_testというコンテナは、すでに停止していたため、STATUSにExited(0)、正常終了したと表示されています。

ログを確認する

ログの確認は下記のコマンドを実行します。

$ docker container logs run_test

オプションfについて

実行中にリアルタイムにログを監視する場合には、fオプションを利用します。

(6) イメージを更新する

イメージを更新するには、以下のようにします。

$  docker container commit run_test centos:httpd  

run_testの部分は、コンテナ名[コンテナID」、centos:httpdの部分は、リポジトリ名:タグ名となっています。

実際に確認してみると下記のように新しいタグ名のものが追加されます。

$ docker image ls                                                                              
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              httpd               7e749923ae3b        2 minutes ago       255MB
centos              latest              831691599b88        4 weeks ago         215MB

(7) イメージを更新、公開する

イメージを更新、公開するには、以下のようにします。こちらは、公開するリポジトリによっても少し違うので注意が必要です。

$ docker push アカウント名/リポジトリ名:タグ名

docker image tag コマンドで<アカウント名><リポジトリ名>:<タグ名> というタグを付加します。docker commit コマンドで作成したイメージIDにタグをつけます。今回の例だと、831691599b88です。

(8) コンテナを削除する

要らなくなったコンテナを削除します。 

$ docker container rm run_test

run_testの部分は、コンテナ名[コンテナID」を指定します。

実行中のコンテナも含めて、全部一気に削除したい場合には、下記のコマンドを実行します。

$ docker container prune -f

(9) イメージを実行する

要らなくなったイメージを削除します。 

$ docker image rm centos

全部一気に削除したい場合には、下記のコマンドを実行します。

$ docker image prune -a 

まとめ

今回は、駆け足ではありますが主要なdockerコマンドとコンテナの状態という観点でまとめました。ここで紹介出来なかったdockerコマンドは、docker docs(https://docs.docker.com/engine/reference/commandline/cli/)などを参照してください。次回は、Dockerfileというファイルを利用したカスタムイメージの生成の仕方について紹介しようと思います。

モバイルバージョンを終了