aws

【A-25】Docker関連のコラム②

実際の業務で docker commitdocker export/import は使うのか?

結論として、ほとんどの業務では この後学ぶ、Dockerfile を使うのが基本 です。しかし、docker commitdocker export/import も特定の状況では役に立つことがあります。

業務で docker commitexport/import を使うケース

とはいえ、docker commitexport/import業務で役立つ場面があります

1. docker commit を使うケース

本番環境では使わないが、開発・デバッグでは使うことがある。

ユースケース例

  • 開発中の環境を一時的に保存したい
    • Dockerfile を書く時間がないが、環境をすぐに残したい場合。
    docker commit <コンテナID> my-temp-image
  • 本番で動いているコンテナをスナップショットとして保存
    • 本番サーバーでコンテナの変更が発生し、緊急バックアップ を取りたい場合。

ただし、commit を乱用すると管理が難しくなるため、正式な環境構築には使わないようにしましょう。


2. docker export/import を使うケース

環境を簡単に移動したい場合に使います。

ユースケース例

  • ネットワークが制限された環境でコンテナを持ち運び
    • 例えば、クラウドに直接アクセスできないオンプレ環境 に Docker を移動する場合。docker save/load でも可能だが、レイヤが不要なら export/import のほうがシンプルです。
  • テスト用の環境を一時的に共有
    • 本番ではなく、開発チーム間でテスト用の環境を受け渡したい場合。

ただし、export/import では環境変数やエントリーポイントが消えるため、再設定が必要となります。

どの方法を業務で使うべきか?

方法本番環境開発・テストデバッグ環境の移動バックアップ
Dockerfile✅ 推奨✅ 推奨❌ 不向き❌ 不向き❌ 不向き
docker commit❌ NG⚠️ 限定的✅ 便利❌ 不向き⚠️ 一時的ならOK
docker export/import❌ NG❌ 不向き❌ 不向き✅ 有効⚠️ メタデータ消える
docker save/load✅ 有効✅ 有効❌ 不向き✅ 有効✅ 最適

本番環境やCI/CDでは Dockerfilesave/load を使うのが基本
⚠️ commitexport/import は、緊急時やオフライン環境でのみ使用

また、Dockerfile では、以下の 「環境の状態」 を保持できません。この点も理解しておきましょう。

項目Dockerfiledocker commitdocker export/importdocker save/load
環境変数 (ENV)✅ 可能✅ 可能❌ 消える✅ 可能
インストールしたパッケージのキャッシュ❌ 失われる✅ 残る❌ 消える✅ 残る
ログや設定ファイルの変更❌ 失われる✅ 残る✅ 残る✅ 残る
コンテナ内で手動で変更したファイル❌ 失われる✅ 残る✅ 残る✅ 残る

例えば、Dockerfile で vim をインストールしても、コンテナ内で .vimrc を編集した場合、その変更は Dockerfile には記録されません

他にも、Dockerfile を docker build するには、インターネット接続が必要です。
しかし、閉じた環境(オフライン環境)では apt-get install や pip install が実行できないため、Dockerfile だけでは環境を再現できません。
銀行や行政系の案件では、インターネットに接続されていない場合もあるため、その際はsave/loadなどが有効となります。

Docker基礎編まとめ

これまで、docker run を使ってコンテナを起動し、-it オプションでインタラクティブに操作する方法 を学んできました。また、Docker Hub から取得したイメージを タグ を指定して管理することで、異なるバージョンを適切に運用する手法も習得しました。

次のステップでは、Dockerfile を活用し、環境をコードとして管理する方法 に進みます。これまでの知識を活かしながら、より再現性の高いコンテナ環境の構築を学んでいきましょう!