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

在电影中《星际迷航:第一次接触,当团队遇到一个非常特定的集体时,他们会得到一句独特的台词:我们是博格人。放下你们的护盾,交出你们的船。我们将把你们的生物和技术优势加入我们的。你们的文化会适应我们的。抵抗是徒劳的。“这句话的最后一部分是我们创作演讲的灵感来源DockerCon 2019。
码头工人的图片非常适合管理和分发软件。你可以轻松地创建一个新版本的应用程序,并将其分发给你的客户,或者在你自己的Kubernetes集群上运行它,这是惊人的。但是如何处理数据和配置呢?您是否应该总是为更改的单个参数创建一个全新的映像?当你添加一个新的插件到你的Jenkins服务器时,你应该分发一个新的镜像吗?Docker镜像对于管理和分发软件来说是非常棒的。但是如何处理数据和配置呢?您是否应该总是为更改的单个参数创建一个全新的映像?点击推特
不总是正确的。我们将向您展示一种从Docker卷中捕获容器持久数据的有用技术。一旦它作为工件,它可以进行版本控制和推广Artifactory随着图像在你的码头工人注册表,并部署到您需要的卷环境中。
数据持久性
你的集装箱码头工人可以将数据存储在内存或文件系统中,具体取决于您对容器的要求。

如果你不关心容器重启时丢失的数据,你可以使用tmpfs山。这些数据永远不会写入任何文件系统,因此不会备份更改。
如果您确实关心数据的持久性,则可以使用绑定安装或卷。两者之间最大的区别在于数据最终存储在哪里,以及由谁管理文件。卷挂载由Docker守护进程管理,通常被认为是持久化数据的最佳方式(特别是因为绑定挂载允许容器访问主机的实际文件系统,同时存在所有相关的安全风险)。所以我应该永远不要使用束缚坐骑吗?你可以,如果你能保证你的文件夹结构永远不会改变。这通常只适用于本地机器。
Jenkins插件和工作
在演讲中,我们看到了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 general -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容器。
如果你在同一台机器上运行命令,就像我们在演讲中所做的那样,你可能想要先通过运行:
多克卷,来自詹金斯之家
之后,需要三个步骤将一切恢复到原来的样子:
#从Artifactory下载jfrog rt dl generic-prod/jenkins.zip #创建卷docker命令——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命令——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 x射线扫描卷。
接下来是什么?
如果您想试驾JFrog Artifactory的所有功能(以及更多)并尝试这些步骤,您可以在我们的网站上注册试驾演示环境。如有问题或意见,请随时在这里留言或给我留言推特!
