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については、次回で解説します。
ホスト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実践入門」などがある。趣味はレーシングカートとビリヤード
Copyright © ITmedia, Inc. All Rights Reserved.