Docker コンテナを別のホストにコピー/移動する方法

Docker コンテナを別のホストにコピー/移動する方法
コンピューターのデスクで作業している人の写真。

Docker コンテナはソフトウェアの小さな箱なので、コンピュータ間で簡単にコピーして移動できます。ローカル コンピュータで Docker インスタンスを操作していて、より強力なサーバーに移動することにしたとします。または、カスタム コンテナを複数のコンピュータに展開し、「コピー アンド ペースト」したいだけかもしれません。また、クラウド コンピューティング プロバイダーに満足できず、別のプロバイダーに切り替えたい場合もあります。ここでは、既存の Docker コンテナ イメージとデータ ボリュームを Linux ホスト間で移動する方法を説明します。

ソースホストからコンテナイメージを保存する

まず、システムで実行されている利用可能な Docker コンテナを一覧表示します。私の場合は、Nginx Docker コンテナを新しいマシンにエクスポートします。

システムで利用可能な Docker コンテナを強調表示するターミナル。

コピーするコンテナを見つけて、インスタンスを停止します。

docker stop コマンドの出力を表示するターミナル。

Docker コンテナは、汎用的な初期イメージから構築されます。時間の経過とともに、このベース イメージに独自の変更が加えられます。コンテナ内で実行されているプロセスも、独自のデータを保存したり、その他の変更を加えたりすることがあります。これらすべてを保存するには、コンテナの現在の状態を新しいイメージにコミットします。

現在実行中のイメージから新しいイメージを作成する docker commit コマンドの出力を表示するターミナル。

インスタンスが現在実行中の場合、このアクションによりインスタンスの内容が保存される間インスタンスが一時停止されることに注意してください。これが問題になる場合は、docker commit -p=false NAME_OF_INSTANCE mycontainerimage代わりに と入力することでこの一時停止を回避できます。ただし、絶対に必要な場合を除いて、これを行わないでください。この場合、不整合/不完全なデータを含むイメージが作成される可能性が高くなります。

次に、新しくコミットした Docker コンテナ イメージをアーカイブ ファイルに保存します。

好みのファイル転送方法を使用して、.tar ファイルを Docker コンテナを移動するホストにコピーします。たとえば、次のコマンドは scp を使用して Nginx Docker イメージを転送します。

コンテナからDockerボリュームをエクスポートする

Docker イメージを保存することの欠点の 1 つは、コンテナーと一緒に設定した Docker アクセサリが付属していないことです。これには、ネットワーク バインド マウントや永続データを保存するために作成したボリュームが含まれます。

データ ボリュームを適切にエクスポートするには、まずローカル マシンに Git をインストールします。

次のコマンドを実行して、Docker のボリューム エクスポート スクリプトをダウンロードします。

エクスポート スクリプトに適切な権限ビットがあることを確認し、それをマシンの「/usr/local/bin:」にコピーします。

スクリプトが正しく動作しているかどうかをテストし、コンテナーに関連付けられているすべてのボリュームを抽出します。

Docker コンテナの関連データ ボリュームをバックアップするプロセスを示すターミナル。

新しくアーカイブされた Docker ボリューム ファイルをリモート マシンに送信します。

宛先ホストにコンテナイメージをロードする

リモート ホストにログインし、次のコマンドを実行してリモート マシンの Docker デーモンにロードします。

ソース マシンの元の実行フラグを使用して Docker コンテナー イメージを再初期化するために使用しますdocker create。たとえば、私の Nginx Docker コンテナーでは、元々ポート 80 がホスト マシンのポート 8080 にマップされていました。

新しくインポートした Docker コンテナを実行します。

システム内のすべてのアクティブなコンテナを一覧表示して、インポートしたイメージが正常に動作していることを確認します。

別のシステムで実行されている同じ Docker コンテナ イメージを表示するターミナル。

コンテナにDockerボリュームをインポートする

.tar Docker ボリューム ファイルをインポートするには、まず新しいホストに Git をダウンロードします。

元のシステムと同様に、docker-volume.sh ヘルパー スクリプトをダウンロードし、権限ビットを「実行」に設定して、新しいマシンの「/usr/local/bin」ディレクトリにコピーします。

コンテナに関連付けられたデータをバックアップするための Docker Volume スクリプトを取得してインストールするプロセスを示すターミナル。

エクスポートしたイメージ ファイルを使用して新しい Docker コンテナを作成します。

元の .tar ファイルで docker-volume.sh スクリプトを実行し、新しいシステムの Docker デーモンにロードします。

次のコマンドを実行して、新しい Docker コンテナを起動します。

コンテナの内部構成データを調べて、コンテナがボリュームを適切にロードしているかどうかをテストします。

新しいマシンにインポートされたボリューム データをハイライト表示する端末。

ファイルを作成せずに画像を転送する

ファイルの作成をスキップしたい場合がmycontainerimage.tar.gzあります。コンテナに大量のデータが含まれているため、ディスク容量が足りない可能性があります。1 つのコマンドで、宛先ホストにイメージを保存、転送、ロードできます。docker commit上記のコマンドを実行した後、以下を使用できます。

SSH クライアントが組み込まれているため、Windows からも動作するはずです (PuTTY は不要になりました)。

docker create状況に応じて適切なコマンドを続行します。

SSH パイプを介してイメージを移動した後、新しい Docker コンテナを作成するプロセスを示すターミナル。

docker start最後に、に続いてコンテナ名を実行して、新しくインポートした Docker コンテナを起動します。

新しいコンテナを起動し、正常に動作していることを確認するプロセスを示すターミナル。

Docker Compose を使用して Docker デプロイメント全体を移動する

Docker の Compose プラグインを使用すると、サーバーの基盤となるソフトウェア スタックを気にすることなく、複雑なプログラムを構築、構成、実行できます。これにより、さまざまな Linux システム間で再現可能なアプリケーション デプロイメントを構築できます。

既存の Docker セットアップを Docker Compose に移行するには、まずそのプラグインが現在システム内にあることを確認します。

Docker Compose インストール用にホーム ディレクトリに新しいフォルダーを作成します。

お気に入りのテキスト エディターを使用して、アプリケーション用の「docker-compose.yml」ファイルを作成します。

次のコード ブロックを Compose ファイル内に貼り付け、特定のニーズに合わせて調整します。

新しい Compose ファイルを保存し、次のコマンドを実行して起動します。

最後に、Compose のデプロイメントが正しく動作しているかテストします。私の場合は、Web ブラウザーを開いて「localhost:8080」に移動し、Nginx Docker コンテナーをテストします。

インポートされた Nginx Docker コンテナが新しいマシン ホスト上で正常に動作していることを示すスクリーンショット。

Docker コンテナをコピーして他の Linux ホストに移動する方法を学ぶことは、マシンで実行できる数少ないタスクの 1 つにすぎません。Docker を使用して Linux に Minecraft サーバーをインストールし、この素晴らしいセルフホスティングの世界を探索してください。

画像クレジット: Max Duzij (Unsplash 経由)。すべての変更とスクリーンショットは Ramces Red によるものです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です