坚持是徒劳的(或者是吗?)-如何管理,版本和提升Docker卷

在电影中《星际迷航:第一次接触,当团队遇到一个非常特别的集体时,他们会听到这句独特的台词:我们是博格人。放下你们的盾,交出你们的船。我们会把你们的生物和技术特性加到我们自己的上。你们的文化会适应我们的。抵抗是徒劳的。“这句话的最后一部分启发了我们创造了我们在DockerCon 2019

码头工人的图片非常适合管理和分发软件。您可以轻松地创建应用程序的新版本并将其分发给您的客户或在您自己的Kubernetes集群上运行它,这是令人惊讶的。但是这是如何处理数据和配置的呢?你是否应该总是为一个变化的参数创建一个全新的图像?当你添加一个新的插件到Jenkins服务器时,你应该分发一个新的图像吗?Docker映像非常适合管理和分发软件。但是这是如何处理数据和配置的呢?你是否应该总是为一个变化的参数创建一个全新的图像?点击微博

不总是正确的。我们将向您展示一种从Docker卷捕获容器持久数据的有用技术。一旦它作为工件,它可以在Artifactory还有你的码头工人注册表,并部署到您需要的卷的环境中。

数据持久性

你的集装箱码头工人可以将数据存储在内存或文件系统中,这取决于您对容器的需求。

如果您不关心在容器重新启动时丢失数据,那么您可以使用tmpfs山。这些数据不会写入任何文件系统,因此不会备份更改。

如果您确实关心数据的持久性,您可以使用绑定安装.两者之间的最大区别是数据最终存储在哪里,以及谁管理文件。卷挂载由Docker守护进程管理,通常被认为是保存数据的最佳方式(特别是因为绑定挂载让容器访问主机的实际文件系统,并存在所有相关的安全风险)。所以我应该永远不要使用绑定坐骑吗?你可以,如果你能保证你的文件夹结构永远不变。这通常只适用于您的本地机器。

詹金斯·普拉金斯和乔布斯

在讨论过程中,我们研究了Jenkins构建服务器使用一组插件并具有一组预定义的作业的场景。这些工作的更新是否会带来新的形象,或者我们能否以一种更聪明的方式进行管理?

要创建一个包含插件、构建作业和所有其他配置的Docker卷,可以运行以下命令:

Docker运行——rm -it——name=jenkins——mount source=jenkins-home,destination=/var/jenkins_home -p 8080:8080 jenkins/jenkins:alpine

这将创建一个新卷,并在完全完成配置后删除容器。

下一步是创建卷的备份,在这种情况下,一个简单的zip文件就可以了。你可以使用的命令是:

Docker运行——rm——mount source=nginx-vol,destination=/var/jenkins_home -v $(pwd):/backup alpine:3.9 sh -c "apk add——no-cache zip && zip -r /backup/jenkins.zip /var/jenkins_home"

要将该文件作为构建到JFrog Artifactory中,您可以使用JFrog CLI运行:

Jfrog rt u——build-name=docker-volume-build——build-number=1 jenkins.zip generic-local/ Jfrog rt bp docker-volume-build

上面的命令将上传jenkins.zip文件到Artifactory存储库,称为generic-local并将其与一个叫做docker-volume-build.因为这是一个构建,所以它将被自动扫描JFrog x光如果您已将其配置为这样做。你的安保团队会很高兴你这么做的。

在JFrog,我们非常喜欢使用管道和工件的提升来运行我们自己的产品和服务,所以要提升构建,使用JFrog CLI,运行:hth华体会最新官方网站

jfrog rt bpr——status=production——comment="Ready for production" docker-volume-build 1 generic-prod

这将构建提升到一个新的Artifactory存储库,称为generic-prod

现在一切都已在Artifactory中,让我们看看如何使用它来创建一个新的Docker卷,并创建一个使用该卷的Docker容器。

如果你在同一台机器上运行命令,就像我们在谈话中所做的那样,你可能想先通过运行命令删除卷:

码头卷rm詹金斯之家

在那之后,需要三步才能让一切恢复原样:

#从Artifactory jfrog rt dl generic-prod/jenkins.zip #创建卷docker run——rm——mount source=jenkins-home,destination=/var/jenkins_home -v $(pwd):/backup alpine:3.9 sh -c "cd / && unzip /backup/jenkins.zip && chmod -R 777 /var/jenkins_home" #运行你的容器docker run——rm -it——name=jenkins——mount source=jenkins-home,destination=/var/jenkins_home -p 8080:8080 jenkins/jenkins:alpine

当您浏览到https://localhost:8080时,您将看到Jenkins登录屏幕,而不是新服务器的配置屏幕。

为什么这很有用?

在整个演讲和文章中,我们探讨了为什么使用Docker卷如此有用。当基本映像始终保持不变,并且您只更新少数文件(如插件、新的Jenkins作业或JAM堆栈中的静态站点)时,这将为您在Docker注册表中节省大量更新。它可能会让您在安全团队中获得一些分数,因为您可以使用JFrog Xray扫描卷。

接下来是什么?

如果您想试驾JFrog Artifactory的所有功能(以及更多)并尝试这些步骤,您可以在我们的网站上注册试驾演示环境.如有问题或意见,请在这里留言或留言推特