Docker-Hubを使用せずにDocker-Imageを共有するにはどうすればよいですか?


257

Dockerのイメージがローカルホストマシンのどこに正確に格納されているのかと思います。私は使用しなくても、私のドッカー-画像を共有することができますDocker-HubDockerfileが、「本物の」ドッカー-イメージ?そして、Docker-ImageをDocker-Hubに「プッシュ」すると、正確にはどうなりますか?


2
今後の参考のために:
Docker

回答:


243

Dockerイメージはファイルシステムレイヤーとして保存されます。Dockerfileのすべてのコマンドでレイヤーが作成されます。docker commitdocker runおそらく)いくつかの変更を行った後、コマンドラインからを使用してレイヤーを作成することもできます。

これらのレイヤーは、デフォルトでに保存されます/var/lib/docker。(理論的には)そこからファイルを選択して別のDockerサーバーにインストールすることもできますが、Dockerで使用される内部表現を試すのはおそらくお勧めできません。

画像をプッシュすると、これらのレイヤーはレジストリ(デフォルトではDockerハブレジストリ、別のレジストリプレフィックスで画像にタグを付けない限り)に送信され、そこに保存されます。プッシュするとき、レイヤーIDを使用して、既にレイヤーがローカルにあるかどうか、またはダウンロードする必要があるかどうかを確認します。を使用docker historyして、どのレイヤー(他の画像)が使用されているか(ある程度、どのコマンドがレイヤーを作成したか)を調べることができます。

Dockerハブレジストリにプッシュせずに画像を共有するためのオプションとして、最適なオプションは次のとおりです。

  • docker save画像またはdocker exportコンテナ。これはtarファイルを標準出力に出力するので、のようなことをしたいでしょうdocker save 'dockerizeit/agent' > dk.agent.latest.tar。次に、docker loadまたはdocker import別のホストで使用できます。

  • 独自のプライベートレジストリをホストします。- 古くなりました、コメント 参照してくださいdockerレジストリ画像を参照してください。必要に応じて開始および停止できるs3ベースのレジストリを構築しました(すべての状態は選択したs3バケットに保持されます)。これはセットアップが簡単です。これは、レジストリにプッシュしたときに何が起こるかを監視する興味深い方法でもあります

  • quay.io(私は個人的には試していません)などの別のレジストリを使用します。ただし、Dockerハブに関する懸念はすべてここでも当てはまります。


6
将来の参考のために、Dockerレジストリイメージへのリンクは古くなっています。Docker Registry 2.0github /
docker

1
Registry 2.0がオリジナルの2.0に取って代わる準備ができていることは明らかではありません。検索stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
JoshRivers

1
に関する質問docker save:別の画像から派生した画像(たとえば、と言いますpython:2.7)をレジストリにプッシュするとき、変更されない限り、親画像を複数回アップロードする必要はありません。部分的な画像を保存して、同様のファイルサイズの最適化を実現できますか?私はこれらのフープを飛び越えています。私は複数の画像を持つ趣味家であり、プライベートレジストリの料金を支払いたくないからです。
Pieter

4
Dockerfileを含むgitリポジトリからdocker build、ホスト上でsrcファイルをプルすることはできませんか?
jshxe 2016

1
私のビルドの@Jishaxeの部分はnpm install...メモリが非常に少ないためホストでビルドできず、このステップは常に失敗します(github.com/npm/npm/issues/5021を参照)
Soft Bullets

46

このブログに基づいて、次のコマンドを実行することにより、DockerレジストリなしでDockerイメージを共有できます。

docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0

このコマンドが完了すると、イメージをサーバーにコピーして、次のようにインポートできます。

docker load --input latestversion-1.0.0.tar

18

Dockerイメージをリモートサーバーに送信するには、次の3つの簡単な手順を実行します。

  1. ローカルで、Dockerイメージを.tarとして保存します。
docker save -o <path for created tar file> <image name>
  1. ローカルでは、scpを使用して.tarをリモートに転送します

  2. リモートサーバーで、イメージをdockerにロードします。

docker load -i <path to docker image tar file>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.