コンテナのライフサイクル
今回は、コンテナ内部のリソースがどのように扱われているのか、確認してみます。
ですがその前に、ここでコンテナのライフサイクルについてまとめます。
Dockerコンテナは「スナップショット」とよばれるイメージファイルとしてその状態を保持しています。
Dockerイメージは「ファイルシステム全体の状態を保持したスナップショット」であり、
runコマンドでそのスナップショットをコンテナとして再現しています。
起動したコンテナはstop中も状態保持されていますが、rmするとスナップショットごと
破棄されます。
つまり、コンテナに内部変更を行いそれを残したい場合には、「新たなイメージとして保存」する必要があります。
コンテナ内部のリソースを編集する
では実際にコンテナに内部変更を加えながら、状態を確認していきます。
まずはコンテナイメージから、httpdコンテナを立ち上げます。
$ docker run -d -p 8080:80 httpd
※(前回説明しませんでしたが)オプション「-d」は"バックグラウンドで動作"、
「-p」は"ポートの指定(ホスト8080番ポートへの通信を、コンテナ80番ポートへ転送)"となります。
起動したらpsコマンドで、httpdコンテナのIDを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 59f1b165c15d httpd "httpd-foreground" 3 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp relaxed_mcclintock
現在バックグラウンドで起動している状態ですので、execコマンドでコンテナの内部に入ります(指定したコンテナの中でbashプロセスを実行する)。
docker exec -it 59f1b165c15d /bin/bash
次にWebページを編集するのですが、現在の状態ではコンテナ上にエディタがインストールされていないので、先にインストールを行っておきます。
apt-get update apt-get install vim
エディタの準備ができたら、index.htmlを以下(黄色字の内容)の様に編集してみます。
vi /usr/local/apache2/htdocs/index.html
<html><body><h1>httpd container working!</h1></body></html>
編集を保存し、httpdを再起動します。
/usr/local/apache2/bin/httpd restart
Webブラウザでページを確認すると、編集内容で更新されているはずです。
ですが、この編集内容は「このコンテナが生きている間だけ」有効なものであり、
コンテナをrmコマンドで破棄してしまうと、先ほどの編集内容(&インストールしたエディタ)も消失します。
コンテナイメージをコミットする
先ほどの変更済みの「httpd」コンテナを新たなコンテナイメージとして保存してみます。
以下の様に「保存したいコンテナID、「保存イメージ名:タグ」を指定してcommitコマンドを発行します。
docker commit 59f1b165c15d httpd_test:0.0.1
imagesコマンドでコンテナイメージを確認すると、「httpd_test」という名前で新しいコンテナイメージが作成されています。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd_test 0.0.1 dbd3b7a24de7 6 seconds ago 179MB
httpd latest 2a51bb06dc8b 5 weeks ago 132MB
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB
では一旦、現在起動中の「httpd」をrmで破棄してから、再度runしてWebページを確認してみます。
こちらはコンテナ内部の編集が破棄されているため、デフォルトの「It works!」が表示されます。
次に「httpd」をstopして、「httpd_test」をrunしてみます。このコンテナイメージはタグを付与しているので、以下の様に実行します。
docker run -d -p 8080:80 httpd_test:0.0.1
Webページを確認すると、「httpd container working!」が表示されます。変更した内容でイメージ化(永続化)することができました。
今回はコンテナのライフサイクルの解説と、コンテナイメージの内部変更を永続化するところまででした。
次回はDockerfileを使ったコンテナイメージの作成方法を確認していきます。
お問い合わせ - お気軽にお問い合わせください -

株式会社 パブリックリレーションズ 〒064-0807 北海道札幌市中央区南7条西1丁目13番地 弘安ビル5階 011-520-1800 011-520-1802