2014-06-30 43 views
172

我想知道Docker的映像究竟存儲在我的本地主機中。 我可以在不使用Docker-HubDockerfile而是使用「真正的」Docker-Image的情況下共享我的Docker-Image嗎?當我將Docker-Image推送到Docker-Hub時發生了什麼?如何在不使用Docker-Hub的情況下共享我的Docker-Image?

+1

以供將來參考:上的好文章[移動碼頭圖像](https://blog.giantswarm.io/moving-docker-container-images-around/) – Mifeet

回答

186

泊塢窗圖像存儲爲文件系統層。 Dockerfile中的每個命令都會創建一個圖層。在進行一些更改(可能通過docker run)之後,您也可以通過在命令行中使用docker commit來創建圖層。

這些圖層默認存儲在/var/lib/docker之下。雖然你可以(理論上)從那裏選擇文件並將其安裝在不同的碼頭服務器中,但使用Docker使用的內部表示形式可能是一個糟糕的主意。

當你推送你的圖像時,這些圖層被髮送到註冊表(默認情況下,docker hub registry,除非你用另一個註冊表前綴標記你的圖像)並存儲在那裏。推送時,圖層ID用於檢查您是否已在本地圖層或需要下載圖層。您可以使用docker history來查看使用哪些圖層(其他圖像)(以及某種程度上,哪個命令創建了該圖層)。

至於選項,而推到泊塢窗樞紐註冊表來分享圖片,你最好的選擇是:

  • docker save圖像或docker export的容器。這將輸出一個tar文件到標準輸出,所以你會喜歡做一些像docker save 'dockerizeit/agent' > dk.agent.lastest.tar。然後,您可以在不同的主機中使用docker loaddocker import

  • 承載您自己的私人註冊表。 - 已過時,查看評論 查看 docker registry image。我們已經建立了一個 s3 backed registry,您可以根據需要啓動和停止(所有狀態都保留在您選擇的s3存儲桶中),這對於設置而言是微不足道的。這也是一種有趣的方式來觀察當推送到註冊表時會發生什麼

  • 使用另一個註冊表像quay.io(我沒有親自嘗試過),儘管無論您對碼頭中心有什麼擔憂可能會適用這裏也。

+6

爲了將來的參考,到碼頭註冊表圖像的鏈接已過時。您現在應該使用[Docker Registry 2.0](https://docs.docker.com/registry/)和[github/docker/distribution](https://github.com/docker/distribution)上的代碼 – RoelAdriaans

+1

我' m不確定很清楚Registry 2.0是否可以替代原來的版本。它似乎錯過了一些基本的功能,如搜索http://stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2 – JoshRivers

+1

關於'碼頭保存'的問題:當我推動一個圖像,從另一個派生圖像(比如'python:2.7')到註冊表中,父圖像不需要多次上傳,除非它發生變化。我可以保存部分圖像以實現類似的文件大小優化嗎?我跳過這些箍,因爲我是一個有多個圖像的業餘愛好者,我不想爲私人註冊表付錢。 – Pieter

1

基於this blog,下面的命令被執行:

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

將圖像複製到服務器,並導入如下:

docker load --input latestversion-1.0.0.tar 
相關問題