【Docker】第3回 コンテナのライフサイクルとイメージの作成


コンテナのライフサイクル

今回は、コンテナ内部のリソースがどのように扱われているのか、確認してみます。
ですがその前に、ここでコンテナのライフサイクルについてまとめます。

 

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階
メールでのお問い合わせはこちら

  • この記事をシェアする