Dockerコンテナーの一覧は、docker psで確認します。
$ docker ps [-a]
docker psコマンドでは実行中のコンテナーのみ表示されますが、「-a」オプションを付加すると、停止中のコンテナーも表示されます。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f66e8ee71dab ubuntu:latest /bin/bash 37 minutes ago Exit 0 ubuntu1 $
コンテナーの状態はSTATUS列で判断できます。「Up {実行時間}」の場合は実行中、Exit 「{終了コード}」の場合は停止しています。
Dockerコンテナーから新しいDockerイメージを作成するために、docker commitを実行します。
$ docker commit {コンテナー名}|{コンテナーID} [{ユーザー名}/]{イメージ名}
先ほどubuntu1コンテナーではnginxをインストールしたので、任意の{ユーザー名}(takipone)と{イメージ名}(nginx)としてイメージを作成してみます。
$ docker commit ubuntu1 takipone/nginx 7fed60d6cc60de39ea80d8fba729e9abbb9899af6bf5c7ebb0a4627aacd36ed4 $
再度docker imagesを実行します。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE takipone/nginx latest 7fed60d6cc60 17 minutes ago 284.1 MB ubuntu latest 99ec81b80c55 4 weeks ago 266 MB $
今度は、作成したDockerイメージ(takipone/nginx)が一覧に表示されました。
nginxを含むDockerイメージが作成できたので、今度はnginxをバックグラウンドで実行し、80番ポートを常時Listenするコンテナーnginx1を作成、実行してみましょう。
nginxをコマンドで実行するためにはいくつかのオプションが必要なので、それらを付加し-dオプションと-pオプションを使用してdocker runを実行します。
$ docker run -d -p 80:80 --name nginx1 takipone/nginx /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf c09a37090ce6c20641eadbe89b3080769ea58736bf7e497c253643d3dbf73a01 $
今度のコンテナーはバックグラウンドで実行中ですので、docker psコマンドの-aオプションなしでも表示されます。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c09a37090ce6 takipone/nginx:latest /usr/sbin/nginx -g d About an hour ago Up About an hour 0.0.0.0:80->80/tcp nginx1 $
試しにホストの80番ポート(nginx)にcurlコマンドでアクセスしてみます。
$ curl localhost:80 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> : (略) $
nginxのデフォルトページがレスポンスとして返ってきたことで、コンテナーでnginxが動作していることが確認できました。
バックグラウンドで実行中のDockerコンテナーは、docker stopで停止します。
$ docker stop {コンテナー名}|{コンテナーID}
nginx1コンテナーを停止してみます。
$ docker stop nginx1 nginx1 $
再度docker psを実行すると、今度はnginx1が表示されませんので、停止していることが分かります。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $
使い終わったDockerコンテナーはdocker rm、Dockerイメージはdocker rmiで削除します。
$ docker rm {コンテナー名}|{コンテナーID} $ docker rmi {イメージ名}|{イメージID}
今回使ったコンテナを削除します。
$ docker rm nginx1 nginx1 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f66e8ee71dab ubuntu:latest /bin/bash 37 minutes ago Exit 0 ubuntu1 $
次いで、作成したイメージを削除します。
$ docker rmi takipone/nginx Untagged: takipone/nginx:latest Deleted: b8d59994452bd6975f4ecbe800d746a0bc508457cae418651297c0c24dd5741a Deleted: 01754064e00386a810ebcce3fd2cca248bf089efa8af1bb3be0a1cc7413f2396 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest 99ec81b80c55 4 weeks ago 266 MB $
これで後片付けは完了です。
停止しているコンテナーは、docker startで再実行します。
$ docker start [-i] {コンテナー名}|{コンテナーID}
-iオプションは、docker runと同様にbashなどのシェルを実行する際に付加します。
先ほど停止したubuntu1コンテナで再度bashを実行する場合には、以下を実行します。
$ docker start -i ubuntu1 e56fc8025840 root@e56fc8025840:/#
今回は、Dockerのインストールを行い、主なコマンドの使い方を紹介して、とコンテナーの起動までを試しましたが、いかがでしたでしょうか。次回は、Dockerイメージのもうひとつの作成方法、Dockerfileファイルとdocker buildコマンドを紹介します。
大瀧隆太
所属/職種:クラスメソッド株式会社 シニアソリューションアーキテクト
ビール片手に邦楽ロックバンドのライブ/フェスへの参加をこよなく愛する。業務ではAWS導入支援やAWS研修の講師に携わる一方、自動化/デプロイツールの活用でクラウドエンジニアがどこまでスケールできるのか日々試行錯誤している。
ブログURL:http://dev.classmethod.jp/
Copyright © ITmedia, Inc. All Rights Reserved.