「docker run/stop/start/rm/commit」の各コマンドの役割を整理しておきます。全体像はこんな感じ。
前提環境はこちらです。
# cat /etc/redhat-release Fedora release 20 (Heisenbug) # uname -a Linux fedora20 3.14.6-200.fc20.x86_64 #1 SMP Sun Jun 8 01:21:56 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux # rpm -q docker-io docker-io-1.0.0-1.fc20.x86_64
まず、「docker run」で新たなコンテナを起動します。「--name」オプションで名前「web01」を付けておきます。「docker ps」は起動中のコンテナを表示します。
# docker run -itd -p 8000:80 -p 2222:22 --name web01 enakai/httpd:ver1.0 d03d99291fbb752f43680c53b4c311052463edda08dec7676e9ed069b17b7760 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d03d99291fbb enakai/httpd:ver1.0 /usr/local/bin/init. 4 seconds ago Up 3 seconds 0.0.0.0:2222->22/tcp, 0.0.0.0:8000->80/tcp web01
「docker stop」でコンテナを停止すると、コンテナ内のプロセスはすべて終了して、コンテナ自体は存在しなくなります。ただし、このコンテナに接続されていたディスクイメージはそのまま残っています。「docker ps -a」で停止中のコンテナ(つまり、ディスクイメージが残っているもの)が確認できます。
# docker stop web01 web01 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d03d99291fbb enakai/httpd:ver1.0 /usr/local/bin/init. 2 minutes ago Exited (-1) Less than a second ago web01
停止中のコンテナは、「docker start」で、再度、起動できます。「docker run」で起動した時と同じオプションでコンテナを作っているようですが、保存してあったディスクイメージを再利用します。「docker restart」は「stop/start」と同じだと思います。
# docker start web01 web01 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d03d99291fbb enakai/httpd:ver1.0 /usr/local/bin/init. 8 minutes ago Up 7 seconds 0.0.0.0:2222->22/tcp, 0.0.0.0:8000->80/tcp web01 # docker restart web01 web01 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d03d99291fbb enakai/httpd:ver1.0 /usr/local/bin/init. 8 minutes ago Up 28 seconds 0.0.0.0:2222->22/tcp, 0.0.0.0:8000->80/tcp web01
「docker commit」でコンテナに接続中のディスクイメージを保存する際は、「docker stop」でプロセスを停止してからやるとよいでしょう。
# docker stop web01 web01 # docker commit web01 enakai/httpd:ver2.0 docke2835a821cdcdfaef8b4a48c30822b949b8654a566653e94b4a7af3ce274bc646
停止中のコンテナに対して、「docker rm」を実行すると、コンテナの情報が完全に削除されて、ディスクイメージも破棄されます。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d03d99291fbb enakai/httpd:ver1.0 /usr/local/bin/init. 11 minutes ago Exited (-1) 2 seconds ago web01 # docker rm web01 web01 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
「docker rm」で破棄せずにほっておくと、ディスクイメージが無駄に溜まっていくので注意しましょう。また、停止中のコンテナの名前を使って、新しいコンテナを起動しようとすると、当然ながらエラーになります。