Dockerイメージのローカル移行の実装

Dockerイメージのローカル移行の実装

最近 Docker を勉強しているのですが、よく問題に遭遇します。Docker イメージをダウンロードすると、よく知られているネットワーク上の理由により失敗します。Docker Hub Mirror などの国内ミラー サービスを使用するなど、オンラインで解決できる方法はたくさんありますが、個人的な理由 (幸いにも外国の VM を持っています) により、ダウンロードしたイメージを Docker レジストリ経由で共有することは好みません。

問題は明らかです:

Docker レジストリを経由せずに、つまり Docker イメージのローカル移行を行わずに、マシン A 上の Docker イメージを他のマシンと共有します。

解決策も非常に簡単です。

Dockerの保存および読み込みコマンドを使用します。具体的な手順は次のとおりです。

1. マシンA上のすべてのDockerイメージを一覧表示し、保存したいイメージ名を見つけます。

sudo docker イメージ

2. マシンAでdocker saveコマンドを使用して、イメージをtarファイルとして保存します。

sudo docker save イメージ名 -o ファイルパス

ここで、image_name は、最初の手順で見つかった保存するイメージの名前に置き換えられます。 file_pathはエクスポートされたtarファイルのパスです(例:/home/tmp/image1.tar)

3. エクスポートしたイメージ tar ファイルをマシン B などの別のマシンに転送します。 scp などさまざまな方法を使用できますが、ここでは詳しく説明しません。

4. docker load コマンドを使用して、イメージを使用する必要があるマシン(マシン B など)にイメージ tar ファイルをロードします。

sudo docker load -i ファイルパス

注: さらに、Docker の export コマンドと import コマンドを使用して同様の機能を実現することもできます。export/save と import/load の違いはインターネットで確認できるので、ここでは詳しく説明しません。

基本的な違いは、エクスポートされるのはコンテナ(履歴とレイヤー情報なし)であるのに対し、保存されるのはイメージ(完全な履歴とレイヤー情報があり、レイヤーのロールバックをサポート)であることです。

補足: Dockerイメージのバックアップと移行

最初のステップ:

すべてのコンテナを表示するにはdocker ps -aコマンドを使用します。

[root@localhost ~]# docker ps -a 
コンテナID イメージ コマンド 作成ステータス ポート名
9505a10e6d29 nginx "nginx -g 'daemon of..." 34 分前 終了 (0) 8 分前 mynginx
4c89fff9ac8c mysql:5.6 "docker-entrypoint.s..." 11日前 終了 (0) 11日前 mymysql
0abefefe2592 centos "/bin/bash" 2 か月前 終了 (255) 12 日前 mycentos

ステップ2:

コンテナはオブジェクトとして保存され、docker commitコンテナ名が保存されます

[root@localhost conf]# docker commit mynginx mynginx_backup
sha256:a6ca067596a2c319ddcdc9592afa9a7e9be4c157959c0327214d3e577333ed3a

ステップ3:

保存した画像を表示する

[root@localhost conf]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
mynginx_backup 最新 a6ca067596a2 19 秒前 109MB

ステップ4:

イメージバックアップ(tar ファイルとして保存)、docker save -o コンテナ名.保存する tar 名

[root@localhost ~]# docker save -o mynginx.tar mynginx_backup

ステップ5:

現在のディレクトリを表示する

[root@localhost ~]# ls
anaconda-ks.cfg conf データ initial-setup-ks.cfg java ログ mynginx.tar original-ks.cfg

ステップ6:

元の画像を削除して表示する

[root@localhost ~]# docker rmi mynginx_backup
タグなし: mynginx_backup:latest
削除済み: sha256:a6ca067596a2c319ddcdc9592afa9a7e9be4c157959c0327214d3e577333ed3a
削除済み: sha256:facd3b28655186bdc7349bc017557ed80f94155831a8a3ed936f498e2f5b6b1c
[root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ

ステップ7:

イメージの復元、docker load -i パッケージ化されたコンテナのファイル名.tar

[root@localhost ~]# docker load -i mynginx.tar 
ea4399e4dbe6: レイヤーを読み込んでいます [============================================================>] 6.656kB/6.656kB
読み込まれたイメージ: mynginx_backup:latest
[root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
mynginx_backup 最新 a6ca067596a2 7 分前 109MB

ステップ8:

このイメージを使用してコンテナを作成します

[root@localhost ~]# docker run --name mynginx2 -p 80:80 -d mynginx_backup
a4809747f3c233d5a8f0c35542449adda10c06305f32c32a55e4842630212760

ステップ9:

ブラウザにIPアドレスを入力して成功するかどうかを確認します

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • kubernetes1.20 で docker (shim) を containerd に置き換える問題について説明します。
  • Dockerコンテナを終了した後も実行を継続する方法
  • Dockerは異常なコンテナ操作を排除する
  • さようなら Docker: 5 分で Containerd に移行する方法
  • Dockerはコンテナにポートを動的に公開します
  • Dockerイメージ内のnoneイメージ操作を削除する
  • Dockerイメージが消える問題を解決する
  • Docker イメージを削除できません エラー: そのようなイメージはありません: xxxxxx 解決策
  • Dockerでイメージを削除する方法
  • Docker でのコンテナとイメージの命名

<<:  HTML は、Web ページの作成者が学習して習得しなければならないものです。

>>:  3Dカルーセル効果を実現するjs

推薦する

Web 開発 js 文字列連結プレースホルダーと conlose オブジェクト API の詳細な説明

目次プレースホルダーの置き換えコンソール印刷テーブル()ログ、情報、警告、エラーグループ()、グルー...

UCenter ホームサイトに統計コードを追加

UCenter Homeは、ComsenzがリリースしたSNSサイト構築システムです。最新バージョン...

K3s 入門ガイド - Docker で K3s を実行するための詳細なチュートリアル

k3dとは何ですか? k3d は、Docker で K3s クラスターを実行するための小さなプログ...

HTML コマンドラインインターフェースの実装

HTML部分コードをコピーコードは次のとおりです。 <!DOCTYPE html> &l...

Excel をインポートするときに js で時間を変換する正しい方法について

目次1. 基本2. 問題の説明3. 解決策付録: js を使用して Excel の日付形式を変換する...

MySQL でストアド プロシージャを作成し、データ テーブルに新しいフィールドを追加する方法の分析

この記事では、例を使用して、MySQL でストアド プロシージャを作成し、データ テーブルに新しいフ...

VMware ESXi6.7 の簡単なセットアップ(画像とテキスト付き)

1. VMware vSphere の概要VMware vSphere は、業界をリードする最も信...

MySQLを定期的にバックアップしてQiniuにアップロードする方法

ほとんどのアプリケーション シナリオでは、緊急時に備えて重要なデータをバックアップし、安全な場所に保...

WindowsとLinux間でファイルを転送する方法

WindowsとLinux間のファイル転送(1)WinSCPを使用して、WindowsファイルをLi...

React プロジェクトにおける axios カプセル化と API インターフェース管理の詳細な説明

目次序文インストール導入環境の切り替え傍受を要求するレスポンスインターセプションAPIの統合管理要約...

MySQL で左結合を使用して where 条件を追加する問題の詳細な分析

現在の需要:グループとファクターの 2 つのテーブルがあります。1 つのグループは複数のファクターに...

1つの記事でTypeScriptのデータ型について学ぶ

目次基本タイプあらゆるタイプ配列タプルインタフェース関数自己推論を入力する結合タイプ(1つ以上選択)...

Winにmysqlをインストールする詳細な手順

この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...

Vue3 コンポジション API の紹介

目次概要例なぜそれが必要なのでしょうか?設定参照、反応的計算して見るライフサイクルVue3.0 は ...

Jenkins でユーザー ロールの権限を設定する方法

Jenkinsのユーザーロール権限の設定には、ロール戦略プラグインのインストールが必要です。 1.ロ...