2017-05-07 164 views
0

我已經通過文件系統更新修改了多個碼頭集裝箱。這些更新不通過更改dockerFile共享碼頭集裝箱

表示這是處理的僞代碼:

docker pull image 
docker run image 
docker exec -it <image_id> bash 
'make changes to running docker container image 
exit running docker container 
docker commit <new container name> 

爲了節省我可以使用docker save...容器和容器的本地副本被保存。可以推送到註冊表嗎?或者註冊只是爲了圖像而不是容器?

是共享一個自定義碼頭容器導出爲.tar文件,然後重新導入其他機器上的單一方法?

回答

3

你永遠不會共享容器,你總是分享圖像。你已經使用不保存容器docker commit命令,它從容器的文件系統(documentation)創建一個新的形象:

從容器的變化創建一個新的形象

使用

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 

您可以像處理任何其他圖像一樣處理由docker commit創建的圖像(從中創建新容器,將其推送到註冊表等)。 只需通過提交現有容器創建一個新的形象,你可以在任何地方推的形象你想要的:

$ docker commit <some-running-container> yourusername/new-image 
$ docker push yourusername/new-image 

如果你不希望使用註冊表,使用docker save命令到現有的圖像導出到一個文件和docker load命令再次導入圖像。

$ docker commit <some-running-container> yourusername/new-image 
$ docker save yourusername/new-image > new-image.tar 
$ # On another machine: 
$ docker load < new-image.tar 
+0

感謝,錯誤地假設,因爲搬運工容器通常> 1GB然後然後推容器具有小的修改現有的容器被認爲是不經濟的,並因此不支持的。這個假設導致我相信將docker容器提交給dockerHub只是通過dockerFile。 –

0

我不知道是否有任何註冊表存在共享容器。即使存在,也會違反碼頭人的哲學。我無法想象共享映像失敗的用例,但容器會成功。圖像意味着被共享(獨立於平臺),而容器(特定於平臺)將從這些圖像創建。