如何使用Docker发布?

前一段时间,我和一家公司进行了一次采访,他们提到他们的应用程序与Docker打包在一起。 他们还说,当修改应用程序时,他们不仅会提交代码,还会提交整个图像。 所以一个版本只需要从git(?)提交。

我没有机会要求更多的细节,所以我不知道他们的意思是…

选项1:

他们实际上把Dockerfile放到了源代码树的某个地方,然后他们提交,然后一些脚本就会把编译好的应用程序复制到右边的目录(我们正在谈论java)。

选项2:

他们提交整个图像(?)。 我不熟悉Docker镜像的结构,它们是二进制还是只是一个带有分发文件的大目录树(加上应用程序的configuration等等)。

还是别的…我不了解docker。

很明显,我不想把图片放在源代码中,并且在git中提交整个分发对我来说似乎有点矫枉过正。

我认为它在选项1和2之间:
当团队中的任何开发人员推送代码时,像Jenkins这样的CI / CD工具可能会使用基础Docker镜像(可以直接拖动Docker镜像或使用Dockefile创build镜像)来创buildDocker容器,然后执行java编译那个容器。 此时,如果图像已经build好,负责创build图像的Dockerfile可能会执行git pullADD或者使用Volume挂载,然后编译java项目。 或者,如果基本映像已经存在,并且基本的环境设置已经存在,那么Java源代码可能已经使用卷或使用另一个引用基本映像的Dockerfile并使用ADD或者执行git pull来创build新映像并最终创build容器代码被编译。 另外,testing可能需要单独的包含数据的数据容器 。 现在相同的容器可能会在其他环境中传递,比如QA或者unit testing和集成testing的预产品(完全取决于devise)。 如果所有的testing都通过了,CI / CD工具可能会提交容器来创build一个新的图像,标记它们以便发布。 现在使用相同的图像(使用该特定标签)在生产中部署容器。
现在,正如你所提到的那样,Dockerfile可能会被提交到源代码树的某个地方,或者可能属于完全不同的repo,只是负责部署。
Docker镜像可能会绑定到构buildpipe道,并进行相应的标记,以便在必要时恢复更改。
在发行版中集成Docker有很多方法。
您可以参考这些post来进一步调查人们在生产中如何使用Docker。
1. https://stackoverflow.com/a/18287169/2167517
2. Docker生产环境中的容器pipe理
3. 创build一个Docker UAT / Production镜像
我希望这在一定程度上帮助了你。 这是一个简单的用例,我相信人们实际上在Docker的生产中使用了很多优雅的devise。