実際の業務で docker commit
や docker export/import
は使うのか?
結論として、ほとんどの業務では この後学ぶ、Dockerfile
を使うのが基本 です。しかし、docker commit
や docker export/import
も特定の状況では役に立つことがあります。
業務で docker commit
や export/import
を使うケース
とはいえ、docker commit
や export/import
も 業務で役立つ場面があります。
1. docker commit
を使うケース
本番環境では使わないが、開発・デバッグでは使うことがある。
ユースケース例
- 開発中の環境を一時的に保存したい
Dockerfile
を書く時間がないが、環境をすぐに残したい場合。
docker commit <コンテナID> my-temp-image
- 本番で動いているコンテナをスナップショットとして保存
- 本番サーバーでコンテナの変更が発生し、緊急バックアップ を取りたい場合。
ただし、commit
を乱用すると管理が難しくなるため、正式な環境構築には使わないようにしましょう。
2. docker export/import
を使うケース
環境を簡単に移動したい場合に使います。
ユースケース例
- ネットワークが制限された環境でコンテナを持ち運び
- 例えば、クラウドに直接アクセスできないオンプレ環境 に Docker を移動する場合。
docker save/load
でも可能だが、レイヤが不要ならexport/import
のほうがシンプルです。
- 例えば、クラウドに直接アクセスできないオンプレ環境 に Docker を移動する場合。
- テスト用の環境を一時的に共有
- 本番ではなく、開発チーム間でテスト用の環境を受け渡したい場合。
ただし、export/import
では環境変数やエントリーポイントが消えるため、再設定が必要となります。
どの方法を業務で使うべきか?
方法 | 本番環境 | 開発・テスト | デバッグ | 環境の移動 | バックアップ |
---|---|---|---|---|---|
Dockerfile | ✅ 推奨 | ✅ 推奨 | ❌ 不向き | ❌ 不向き | ❌ 不向き |
docker commit | ❌ NG | ⚠️ 限定的 | ✅ 便利 | ❌ 不向き | ⚠️ 一時的ならOK |
docker export/import | ❌ NG | ❌ 不向き | ❌ 不向き | ✅ 有効 | ⚠️ メタデータ消える |
docker save/load | ✅ 有効 | ✅ 有効 | ❌ 不向き | ✅ 有効 | ✅ 最適 |
✅ 本番環境やCI/CDでは Dockerfile
と save/load
を使うのが基本
⚠️ commit
や export/import
は、緊急時やオフライン環境でのみ使用
また、Dockerfile では、以下の 「環境の状態」 を保持できません。この点も理解しておきましょう。
項目 | Dockerfile | docker commit | docker export/import | docker 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 を活用し、環境をコードとして管理する方法 に進みます。これまでの知識を活かしながら、より再現性の高いコンテナ環境の構築を学んでいきましょう!