在不使用存储库的情况下部署Docker镜像

我在构build服务器上构buildDocker镜像(使用TeamCity)。 构build完成后,我想要将该映像部署到某个服务器(分段,生产)。

所有的教程我都find了

  • 将图像推送到某个存储库,在那里它可以被小型项目中的服务器下载(拉取),从而增加了复杂性
  • 使用类似Heroku的方法,并在“near”或将要运行的机器上构build图像

我真的认为没有什么特别的应该在(应用程序)服务器上完成。 IMO的图像应该作为封闭的,自给自足的二进制代码来代表整个应用程序,并且可以在构build服务器,testing,问答等之间传递。

但是,当我save一个基于官方node库的标准NodeJS应用程序时,它具有1.2 GB 。 将这样的文件从服务器传递到服务器并不是很舒服。

问:是否有一些方法可以通过SSH导出/保存和上传图像的变化部分(图层),而不会引入Docker存储库的复杂性? 然后,服务器将从公共hub.docker.com中提取缺失的图层 ,以避免从我的networking上传到云端。

投资save的内容从技术angular度来看不应该是困难的。 push命令基本上就是这样 – 它永远不会上传已经存在于回购中的图层。

Q2:你认为在我部署的docker-host上运行一个小的repo是为了达到这个目的吗?

如果你的代码可以在Github或BitBucket上运行,为什么不使用DockerHub自动构build是免费的。 这样你节点上,你只需要docker pull user/image 。 github仓库和dockerhub自动化版本都可以是私人的,所以你不必把你的代码暴露给世界。 虽然您可能必须支付多个私人存储库或构build版本。

如果你仍然想build立你自己的图像,那么当你运行build命令时,你会发现类似于以下内容:

 Step 0 : FROM ubuntu ---> c4ff7513909d Step 1 : MAINTAINER Maluuba Infrastructure Team <infrastructure@maluuba.com> ---> Using cache ---> 858ff007971a Step 2 : EXPOSE 8080 ---> Using cache ---> 493b76d124c0 Step 3 : RUN apt-get -qq update ---> Using cache ---> e66c5ff65137 

每个哈希eg ---> c4ff7513909d都是中间层。 您可以在/var/lib/docker/graphfind使用该散列命名的文件夹,例如:

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

只要你把所有的中间层复制到你的部署服务器上,你就不需要外部的docker仓库。 如果你只是改变其中一个中间层,你只需要重新部署一个重新部署。 如果您注意到DockerFile中列出的步骤都会导致中间层。 只要你改变DockerFile的最后一行,你只需要上传一层。 因此,我build议将您的ADD代码行放在您的docker文件的末尾。

 ADD MyGeneratedCode /var/my_generated_code