第7回 Dockerに触れ、マルチOSを体験してみよう(後編)古賀政純の「攻めのITのためのDocker塾」(3/3 ページ)

» 2015年09月02日 08時00分 公開
前のページへ 1|2|3       

Dockerコンテナの「終了」を理解する

 Dockerコンテナ「c0001」のプロンプトが表示されているということは、その実行状態が続いています。ここで、Dockerコンテナ「c0001」のコマンドプロンプトから、「exit」を入力してみると、コンテナはどうなるでしょうか。実際にやってみましょう。

[root@host0001 /]# exit
exit
#

 ホストOSのプロンプトが表示されました。Dockerコンテナ「c0001」の状態を確認してみましょう。コンテナは稼働しているのでしょうか。

# docker ps -a
CONTAINER ID  IMAGE             COMMAND      CREATED     STATUS                    ... NAMES
b7d3670df923  centos:centos6.6  "/bin/bash"  2 days ago  Exited (0) 4 seconds ago  ... c0001

 Dockerコンテナのプロンプトをexitで抜けた後、「docker ps -a」の出力のSTATUS列に「Exited (0)...」という表示が表れました。コンテナは終了していることが確認できました。

 これはどういうことでしょう。「docker run」を実行した時を思い出してください。docker runを実行する時に、最後に/bin/bashを指定しました。Dockerでは、コンテナを起動する際に/bin/bashを指定すると、コンテナ上でユーザーが操作するためのbashが実行されます。Dockerコンテナ上のbashのコマンドラインをexitで終了すると、docker runで指定した/bin/bashが終了し、コンテナが終了する仕組みになっています。

 より理解を深めるために、/bin/bashではなく、日付を表示する/bin/dateコマンドをDockerコンテナ起動時に指定してみます。ホストOSのコマンドプロンプトから、Dockerコンテナ「c0004」を以下のように起動します。

# docker run -i -t --name c0004 --hostname host0004 centos:centos6.6 /bin/date
Tue Jul 28 01:21:14 UTC 2015

 ではDockerコンテナ「c0004」はどうなっているのでしょう。日付を表示したコンテナは稼働し続けているのか。docker ps -aで確認してみます。

# docker ps -a
CONTAINER ID  IMAGE             COMMAND      CREATED        STATUS                    ...  NAMES
85c24874abf3  centos:centos6.6  "/bin/date"  6 minutes ago  Exited (0) 6 minutes ago  ...  c0004

 dateコマンドによる日付を表示するDockerコンテナ「c0004」のSTATUSは、「Exited (0)...」と表示されました。つまりコンテナ「c0004」は終了しています。dateコマンドは日付を表示すると、すぐにプロセスが終了します。ここでのDockerコンテナ「c0004」は、起動時にbashプロンプトでなく、dateコマンドが指定されているため、dateコマンドが終了するとすぐDockerコンテナも終了するのです。

 逆に言うと、Dockerでは、コンテナでサービスを提供し続けるためには、コマンドがすぐに終了しない仕組みを作成する必要があります。コマンドがすぐに終了しない仕組みにはさまざまな方法がありますが、簡単なものとしてはDockerコンテナで実行するコマンドをスクリプト化し、そのスクリプトの最後に「tail -f /dev/null」を付与する方法があります。

 dateコマンドを実行するスクリプトを実行し、さらに、Dockerコンテナが稼働し続けるように「tail」コマンドを実行するといった複数の処理をコンテナ上で行うには、Dockerイメージ構築の自動化で利用される「Dockerfile」が有用です。Dockerのキモともいうべき、このDockerfileについては、次回で解説します。

不要になったDockerコンテナとDockerイメージを削除してみる

 ホストOSで作業をしていると、Dockerコンテナが次々と作られることが分かります。今回の練習でもDockerコンテナがいくつか生成されていると思いますので、不要なDockerコンテナを削除してみましょう。

 Dockerコンテナの削除は「docker rm」にコンテナ名または、コンテナIDを指定します。コンテナ名、および、コンテナIDは、ホストOSから「docker ps -a」で確認できます。「docker rm」に-fオプションを付与することで、コンテナが稼働中であっても、強制的に削除できます。

# docker ps -a
CONTAINER ID   IMAGE                 COMMAND               ... STATUS      ... NAMES
4e484dd65c7d   date0001:latest       "/usr/local/bin/date  ... Up 11 hours ... c0006
866f3a883251   c66apache0002:latest  "/sbin/init"          ... Up 12 hours ... c0005
2d36ee3f124d   c66apache0001:latest  "/sbin/init"          ... Up 13 hours ... c0003
 
# docker rm -f c0003
# docker rm -f c0005

 Dockerイメージの削除は、docker rmiにDockerイメージのリポジトリ名とタグ名を組み合わせた文字列、またはイメージIDを指定します。ホストOSからDockerイメージを確認し、慎重に作業しましょう。

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
date0001            latest              09ecd6cb65f9        11 hours ago        202.6 MB
c66apache0001       latest              0b578d636fb6        12 hours ago        411.2 MB
c66apache0002       latest              0b578d636fb6        12 hours ago        411.2 MB
centos              c66docker0001       09fbf9b2e0fc        9 weeks ago         202.6 MB
docker.io/centos    centos6.6           8b44529354f3        3 months ago        202.6 MB
docker.io/centos    centos7.1.1503      f1dade627e25        3 months ago        212.1 MB
# docker rmi c66apache0001
...
# docker rmi c66apache0002:latest
...
# docker rmi centos:c66docker0001

 ……Dockerのお試し体験はいかがでしたでしょうか。Dockerは何に活用できるか、その先は見えてきましたでしょうか。

 次回はもっと「実践/応用」の部分を説明していく予定です。お楽しみに。

(第8回はこちら


古賀政純(こが・まさずみ)

日本ヒューレット・パッカード株式会社 オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国HPからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本HPにて、Linux、FreeBSD、Hadoopなどのサーバー基盤のプリセールスSE、文書執筆を担当。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード



関連キーワード

Docker | CentOS | 攻めの経営 | Linux


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ