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

标签 deployment filesystems docker layer

我正在构建服务器上构建 Docker 镜像(使用 TeamCity)。构建完成后,我想获取镜像并将其部署到某个服务器(暂存、生产)。

我找到的所有教程

  • 将图像推送到某个存储库,供服务器下载(拉取)图像,这在小型项目中会引入额外的复杂性
  • 使用类似 Heroku 的方法并在“附近”或将要运行的机器上构建图像

我真的认为在(应用程序)服务器上不应该做任何特别的事情。图像,IMO,应该充当封闭的、自给自足的二进制文件,代表整个应用程序,并且可以在构建服务器、测试、问答等之间传递。

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

问:有没有什么方法可以通过 SSH 导出/保存和“上传”镜像的更改部分(层)而不引入 Docker 存储库的复杂性?然后服务器会拉公共(public) hub.docker.com 中缺少的 layers 以避免从我的网络缓慢上传到云端。

投资 saved tarfile 的内容从技术角度来看应该不难。 push 命令基本上就是这样做的——它从不上传已经存在于 repo 中的层。

Q2:您认为在我部署到的 docker-host 上运行一个小型 repo 以实现此目的是一个好方法吗?

最佳答案

如果您的代码可以在 Github 或 BitBucket 上运行,为什么不直接使用 DockerHub Automated builds免费。这样在你的节点上你只需要 docker pull user/image。 github 存储库和 dockerhub 自动构建都可以是私有(private)的,因此您不必向世界公开您的代码。尽管您可能需要为多个私有(private)存储库或构建付费。

如果您仍然想构建自己的图像,那么当您运行构建命令时,您会看到类似于以下内容的输出:

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

每个哈希 e.g. ---> c4ff7513909d 是中间层。您可以在 /var/lib/docker/graph 找到以该哈希命名的文件夹,例如:

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

只要将所有中间层复制到部署服务器,就不需要外部 docker 存储库。如果您只更改中间层之一,则只需重新复制该中间层即可重新部署。如果您注意到 DockerFile 中列出的每个步骤都通向一个中间层。只要您只更改 DockerFile 中的最后一行,您只需上传一层。因此,我建议将您的 ADD 代码行放在 docker 文件的末尾。

ADD MyGeneratedCode /var/my_generated_code

关于deployment - 在不使用存储库的情况下部署 Docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24676992/

相关文章:

deployment - WebSphere 8 是否有类似于 Tomcat Valves 的东西来拦截请求(不是应用程序内的 Servlet Filters..)?

azure - 如何强制 Azure WebApp 在每次部署后重新启动?

c# - 监视特定文件关闭 c#

actionscript-3 - 如何将文件放入\保存到应用程序目录中? (土坯空气)

wordpress - 使用docker-compose将WordPress命名卷挂载到NGINX容器的子目录中

postgresql - Docker:Springboot容器无法连接到PostgreSql容器连接错误

docker-compose 与远程主机不使用 ssh

azure - 在 Azure 中设置和部署多部分 Web 应用程序

java - 发布java spring web应用程序时,部署/发布的步骤是什么?

mysql - 类似 IDE 的系统 - 用于存储的数据库或文件系统