Docker コンテナを別のホストにコピー/移動する方法
Docker コンテナはソフトウェアの小さな箱なので、コンピュータ間で簡単にコピーして移動できます。ローカル コンピュータで Docker インスタンスを操作していて、より強力なサーバーに移動することにしたとします。または、カスタム コンテナを複数のコンピュータに展開し、「コピー アンド ペースト」したいだけかもしれません。また、クラウド コンピューティング プロバイダーに満足できず、別のプロバイダーに切り替えたい場合もあります。ここでは、既存の Docker コンテナ イメージとデータ ボリュームを Linux ホスト間で移動する方法を説明します。
ソースホストからコンテナイメージを保存する
まず、システムで実行されている利用可能な Docker コンテナを一覧表示します。私の場合は、Nginx Docker コンテナを新しいマシンにエクスポートします。
コピーするコンテナを見つけて、インスタンスを停止します。
Docker コンテナは、汎用的な初期イメージから構築されます。時間の経過とともに、このベース イメージに独自の変更が加えられます。コンテナ内で実行されているプロセスも、独自のデータを保存したり、その他の変更を加えたりすることがあります。これらすべてを保存するには、コンテナの現在の状態を新しいイメージにコミットします。
インスタンスが現在実行中の場合、このアクションによりインスタンスの内容が保存される間インスタンスが一時停止されることに注意してください。これが問題になる場合は、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 create
。たとえば、私の Nginx Docker コンテナーでは、元々ポート 80 がホスト マシンのポート 8080 にマップされていました。
新しくインポートした Docker コンテナを実行します。
システム内のすべてのアクティブなコンテナを一覧表示して、インポートしたイメージが正常に動作していることを確認します。
コンテナにDockerボリュームをインポートする
.tar Docker ボリューム ファイルをインポートするには、まず新しいホストに Git をダウンロードします。
元のシステムと同様に、docker-volume.sh ヘルパー スクリプトをダウンロードし、権限ビットを「実行」に設定して、新しいマシンの「/usr/local/bin」ディレクトリにコピーします。
エクスポートしたイメージ ファイルを使用して新しい Docker コンテナを作成します。
元の .tar ファイルで docker-volume.sh スクリプトを実行し、新しいシステムの Docker デーモンにロードします。
次のコマンドを実行して、新しい Docker コンテナを起動します。
コンテナの内部構成データを調べて、コンテナがボリュームを適切にロードしているかどうかをテストします。
ファイルを作成せずに画像を転送する
ファイルの作成をスキップしたい場合がmycontainerimage.tar.gz
あります。コンテナに大量のデータが含まれているため、ディスク容量が足りない可能性があります。1 つのコマンドで、宛先ホストにイメージを保存、転送、ロードできます。docker commit
上記のコマンドを実行した後、以下を使用できます。
SSH クライアントが組み込まれているため、Windows からも動作するはずです (PuTTY は不要になりました)。
docker create
状況に応じて適切なコマンドを続行します。
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 コンテナーをテストします。
Docker コンテナをコピーして他の Linux ホストに移動する方法を学ぶことは、マシンで実行できる数少ないタスクの 1 つにすぎません。Docker を使用して Linux に Minecraft サーバーをインストールし、この素晴らしいセルフホスティングの世界を探索してください。
画像クレジット: Max Duzij (Unsplash 経由)。すべての変更とスクリーンショットは Ramces Red によるものです。
コメントを残す