コンテナは使い捨て
今までvagrantなどを利用して環境構築して来た人が一番面食らうのが「コンテナは使い捨てである」ということです。
コンテナは、イメージを元に生成され、アプリケーションの実行に利用されたら、あとは削除されるのが通常の運用です。
コンテナにログインして、様々なソフトウェアをインストールしたり、設定ファイルを編集したりしても、コンテナが破棄された時には全て消えてしまいます。
これは一見不便に思えますが、このことがdockerの使いやすさを支えているというのが重要なポイントです。
Dockerfile に全て書かれている
例えば、各種ソフトウェアをインストールし、設定ファイルを編集して、アプリケーション用の環境を整えたとします。
この設定内容は、通常は実際に設定ファイルを確認したり、各種ソフトウェアがインストールされているかどうかを確認しなければわかりません。
しかし、Dockerでは公式のイメージをベースにして、どのような変更が行われたかが全てDockerfileに書き込まれることになります。
そのため、公式イメージからの変更点は全てDockerfileを見ればわかるようになっています。(Dockerfileから別のファイルを読み込むケースはあります。)
ライフサイクルの長い環境であれば、徐々に内容がブラックボックス化されていきますが、Dockerではコンテナが使い捨てであることによってブラックボックス化が防止されているのです。
imageのコミットよりもDockerfileで
前章でvimを追加したcontainerをcommitしてイメージ化しましたが、これは上記で述べたブラックボックス化に繋がってしまいます。 実際のimage構築はDockerfileで行うのが望ましいと認識しておきましょう。