2014-07-10 155 views
6

我在構建服務器上構建Docker鏡像(使用TeamCity)。構建完成後,我想拍攝圖像並將其部署到某個服務器(分段,製作)。在不使用存儲庫的情況下部署Docker鏡像

所有教程我已經找到

  • 推圖像的一些庫,在這裏可以下載(拉)服務器(一個或多個),這在小型項目引入額外的複雜性
  • 使用Heroku的樣要麼方法和建立圖像「附近」或在它將運行的機器

我真的認爲沒有什麼特別的應該在(應用)服務器上完成。圖像IMO應當充當代表整個應用程序的封閉自給自足的二進制文件,並且可以在構建服務器,測試,等等之間傳遞。

但是,當我標準的NodeJS應用程序基於官方node存儲庫它有1.2 GB。將這樣的文件從服務器傳遞到服務器並不是很舒服。

問:是否有某種方式通過SSH導出/保存並上傳圖像的更改部分(圖層),而不會引入Docker存儲庫的複雜性?然後,服務器將從公衆hub.docker.com中提取缺失的,以避免從我的網絡上傳到雲端的速度緩慢。

投資於save d tarfile的內容,從技術角度來看應該不難。 push命令基本上就是這樣 - 它從不上載已經存在於回購庫中的圖層。

Q2:您是否認爲在我部署的docker-host上運行一個小的repo以實現此目標是一種好方法?

回答

0

如果您的代碼可以在Github或BitBucket上運行,爲什麼不使用DockerHub Automated builds是免費的。這樣你節點上,你只需要docker pull user/image。 github倉庫和dockerhub自動化版本都可以是私有的,所以你不必將代碼暴露給世界。儘管您可能需要支付多個私有存儲庫或構建版本。

如果你仍然想建立自己的圖像,然後當你運行你看出來了把類似於下面的編譯命令:

Step 0 : FROM ubuntu 
---> c4ff7513909d 
Step 1 : MAINTAINER Maluuba Infrastructure Team <[email protected]> 
---> Using cache 
---> 858ff007971a 
Step 2 : EXPOSE 8080 
---> Using cache 
---> 493b76d124c0 
Step 3 : RUN apt-get -qq update 
---> Using cache 
---> e66c5ff65137 

散列e.g. ---> c4ff7513909d中的每一箇中間層。你可以找到它與哈希任命爲/var/lib/docker/graph文件夾,例如:

ls /var/lib/docker/graph | grep c4ff7513909d 
c4ff7513909dedf4ddf3a450aea68cd817c42e698ebccf54755973576525c416 

只要你拷貝所有的中間層部署的服務器,你不會需要一個外部的碼頭工人庫。如果您只更改其中一箇中間層,則只需重新複製該層即可進行重新部署。如果您注意到DockerFile中列出的步驟均導致中間層。只要你改變DockerFile中的最後一行,你只需要上傳一層。因此,我建議將您的ADD代碼行放在docker文件的末尾。

ADD MyGeneratedCode /var/my_generated_code 
相關問題