Dockerの画像が私のローカルホストマシンのどこに正確に保存されているのでしょうか。 Docker-Hub
やDockerfile
を使わずに '本物の' Docker-Imageを使わずにDocker-Imageを共有できますか?そして、Docker-ImageをDocker-Hubに「プッシュ」したときに何が起きているのでしょうか。
Dockerイメージはファイルシステムレイヤとして保存されます。 Dockerfileの各コマンドはレイヤーを作成します。 (おそらくdocker commit
経由で)いくつかの変更を加えた後にコマンドラインからdocker run
を使ってレイヤーを作成することもできます。
これらのレイヤはデフォルトで/var/lib/docker
の下に格納されています。 (理論的には)そこからファイルを選択して別のdockerサーバーにインストールすることはできますが、おそらくDockerで使用されている内部表現を使用することはお勧めできません。
画像をプッシュすると、これらのレイヤーはレジストリ(デフォルトではdocker hubレジストリ)に送信され、そこに別のレジストリプレフィックスを付けてタグ付けされます。プッシュ時には、レイヤIDを使用して、すでにローカルにレイヤがあるかどうか、またはダウンロードする必要があるかどうかを確認します。 docker history
を使用して、どのレイヤー(他の画像)が使用されているか(そしてある程度までは、どのコマンドがレイヤーを作成したか)を調べることができます。
港湾労働者ハブのレジストリにプッシュせずに画像を共有するためのオプションに関しては、あなたの最良の選択肢は次のとおりです。
docker save
は画像、docker export
はコンテナです。これはtarファイルを標準出力に出力するので、あなたはdocker save 'dockerizeit/agent' > dk.agent.latest.tar
のようなことをしたいでしょう。そうすれば、別のホストでdocker load
またはdocker import
を使用できます。
あなた自身のプライベートレジストリをホストします。 - 時代遅れ、コメントを参照 docker registry image を参照してください。セットアップが簡単な s3バックアップレジストリ 必要に応じて起動および停止が可能です(すべての状態はs3バケットに保持されます)。これは、レジストリにプッシュしたときに何が起こるかを見るのにも興味深い方法です。
Docker Hubに関する懸念があれば、ここでも当てはまりますが、 quay.io (私は個人的に試したことはありません)のような別のレジストリを使用します。
このブログ に基づいて、dockerレジストリなしでdockerイメージを共有することができます。
docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0
このコマンドが完了すると、イメージをサーバーにコピーして次のようにインポートできます。
docker load --input latestversion-1.0.0.tar
Docker Hub自体を使用したくない場合は、JFrogによるArtifactoryの下で独自のDockerリポジトリーをホストできます。
https://www.jfrog.com/confluence/display/RTF/Docker+Repositories
これはあなた自身のサーバーで実行されます。
CoreOSなど、他のホスティングサプライヤも利用できます。
http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/
quay.ioを買った
Dockerイメージをリモートサーバーに送信するには、3つの簡単な手順で行うことができます。
ローカルに、dockerイメージを。tarとして保存します。docker save -o <path for created tar file> <image name>
ローカルでは、scpを使用して。tarをリモートに転送します。
リモートサーバーで、dockerに画像をロードします。docker load -i <path to docker image tar file>