同僚と共有する必要のあるDockerイメージを作成しましたか?受信者がdockerbuild
を実行しなくても画像を配布する方法は次のとおりです。
Dockerfile
の代わりにビルド済みのイメージを共有する 同僚がまったく同じソフトウェアを実行していることを確認できます。ビルドを再実行すると、環境が微妙に異なる可能性があります。状況に応じて、画像を配布するための2つのオプションがあります。
Dockerレジストリを使用する
Dockerイメージを共有する最も簡単な方法は、DockerイメージをDockerレジストリにプッシュすることです。この機能は、DockerCLIに完全に統合されています。この方法を使用する場合、手動でファイル転送を行う必要はありません。
デフォルトのレジストリはDockerHubです。これにより、画像を公に共有でき、1つのプライベートリポジトリも提供されます。 Docker Hubでアカウントを作成し、 docker login
を実行します あなたのターミナルで。アカウントの詳細を入力して、DockerCLIをアカウントに接続します。
次に、 docker build
を使用して、通常どおりイメージをビルドします 。 Docker Hubユーザー名で始まるタグを追加します:
docker build -t my-account/my-image:latest .
次に、 docker push
を使用します タグ付けされたイメージをDockerHubにプッシュするコマンド:
docker push my-account/my-image:latest
これで、イメージがDockerHubに安全に保存されます。他のユーザーは、 docker pull
を使用してプルダウンできます。 またはdockerrun
コマンド。画像の共有が完了しました!
実際に使用するには、DockerHubでは不十分な場合があります。開発チームの一員である場合は、パブリックハブレジストリではなく、独自のサーバーにイメージを保持することをお勧めします。代わりに、自己ホスト型レジストリサーバーを作成して、 docker push
と完全に互換性のあるプライベートストレージを取得できます。 およびdockerpull
コマンド。これにより、プライベートレジストリにアクセスできるすべての人と画像を簡単に共有できます。
レジストリを使用できない場合は、代わりにDockerイメージアーカイブを手動でエクスポートできます。この機能は、DockerCLIにも組み込まれています。イメージを作成してから、 docker save
を使用します tar
を取得するコマンド その内容のアーカイブ:
docker save my-image:latest > my-image.tar
エクスポートが完了するまでに少し時間がかかる場合があります。 Dockerには、イメージの再作成に必要なすべてのものが含まれます。これは、 Dockerfile
のすべてのレイヤーです。 、およびベースイメージから継承されたレイヤー。アーカイブには、画像に関連付けられているタグに関する情報も含まれます。
出力は単純な<code>tarであるため ファイルを作成すると、選択した方法で自由に配布できるようになります。アーカイブは非常に大きくなる可能性があるため、通常はファイルサーバーまたはクラウドストレージプロバイダーにアップロードすることをお勧めします。
エクスポートされた画像を使用するには、 docker load
を実行します 指図。これはtar
を受け入れます docker save
によって作成されたアーカイブ 入力ストリームとして。 Dockerはアーカイブのコンテンツをロードし、ローカルイメージのリストに追加します。
docker load < my-image.tar
これで、新しくインポートされた画像が docker images
に表示されます。 出力。 docker run
で新しいコンテナを開始する準備ができました 。
イメージをエクスポートおよびインポートすると、Dockerレジストリを使用するよりもいくつかの追加手順が追加されます。クライアント間でファイルを手動で転送する必要があります。したがって、このアプローチには利点もありますが、頻繁に使用するのにはあまり適していません。
画像をtar
に変換する アーカイブは長期保存に役立ちます。レジストリサーバーの容量が不足している場合は、古い画像をアーカイブして tar
をアップロードします ファイルストレージをバックアップすることは、容量を再利用するための費用効果の高い方法である可能性があります。将来必要になった場合でも、画像を復元することができます。
「dockerexport」はどうですか?
Dockerには、別のエクスポート関連コマンド docker export
があります 。これをdockersave
と混同しないでください 。一方、 save
画像で動作します、 export
実際に個々のコンテナを管理します 。
docker export
tar
を生成します コンテナのファイルシステムのアーカイブ。これは、別のマシンでコンテナのレプリカを復元するために使用できます。アーカイブの内容を調べると、 / bin
のようなディレクトリを持つ通常のLinuxルートファイルシステムであることがわかります。 、 / etc
および/usr
。
docker export my-container > my-container.tar
docker export
後で復元するためにコンテナのスナップショットを作成する場合に便利です。ただし、コンテナアーカイブは、最初に期待した方法ではインポートされません。コンテナは稼働中の実行環境を表すため、コンテナを直接「インポート」することはできません。代わりに、コンテナアーカイブをインポートすると、新しいが作成されます。 画像。
docker import my-container.tar my-image:latest
この例では、Dockerは my-container.tar
のファイルシステムを取得します my-image:latest
という新しい画像を自動的に作成します 。これは同じファイルシステムになりますが、エクスポートした元のコンテナーと同じベースイメージまたはDocker構成にはなりません。
関連: Githubの新しいDockerコンテナレジストリの使用を開始する方法
Dockerを使用すると、アプリケーションイメージと開発環境を共同作業者と簡単に共有できます。通常は、他のすべてのユーザーがプルできる一元化されたリポジトリにイメージをプッシュするのが最善です。シナリオによっては、手動で配布するアーカイブに画像をエクスポートする方が理にかなっている場合があります。
Dockerを使用すると、コンテナのファイルシステムをエクスポートして、後でイメージに復元することもできます。これは正確な再構築ではなく、すべてのファイルシステムデータが含まれるわけではないため、これを使用する場合は注意が必要です。元のコンテナにマウントされたボリュームはファイルシステムアーカイブに含まれないため、これらを個別にバックアップする手順を実行する必要があります。