了解如何使用Ansible在容器中执行命令。容器和Ansible非常适合:从管理和编排到配置和构建。在本文中,我们将重点关注构建部分。如果您熟悉Ansible,就会知道您可以编写一系列任务,ansible-playbook命令会为您执行这些任务。您知道吗,如果您编写Dockerfile并运行podmanbuild,您也可以在容器环境中执行此类命令并获得相同的结果。这是一个例子:-名称:使用httpd主机提供我们的文件:所有任务:-名称:安装httpd包:名称:httpd状态:已安装-名称:将我们的文件复制到httpd的webroot副本:src:our-file.txtdest:/var/www/html/您可以在Web服务器或容器中本地执行此剧本,只要您记得先创建our-file.txt,它就会起作用。但是这里缺少一些东西。您需要启动(并配置)httpd来提供文件服务。这就是容器构建和基础设施供应的区别:构建镜像时,只需要准备内容;运行容器是另一项任务。另一方面,您可以将元数据附加到容器镜像,默认情况下它会运行命令。这是一个可以提供帮助的工具。试试ansible-bender怎么样?$ansible-benderbuildthe-playbook.yamlfedora:30our-httpd该脚本使用ansible-bender针对Fedora30容器镜像执行playbook,并将生成的容器镜像命名为our-httpd。但是,当您运行该容器时,它不会启动httpd,因为它不知道如何启动。您可以通过向该剧本添加一些元数据来解决此问题:-name:使用httpdhosts:allvars:ansible_bender:base_image:fedora:30target_image:name:our-httpdcmd:httpd-DFOREGROUNDtasks:-name:Installhttpd包:名称:httpd状态:已安装-名称:监听所有网络接口。lineinfile:path:/etc/httpd/conf/httpd.confregexp:'^Listen'line:Listen0.0.0.0:80-name:将我们的文件复制到httpd的webrootcopy:src:our-file.txtdest:/var/www/html现在您可以构建图像(从这里,以root身份运行所有命令。目前,Buildah和Podman不会为无根容器创建私有网络):#ansible-benderbuildthe-playbook.yamlPLAY[使用httpd提供我们的文件]********************************************************任务[收集事实]***********************************************************************好的:[our-httpd-20191004-131941266141-cont]任务[安装httpd]*******************************************************************从缓存加载:'f053578ed2d47581307e9ba3f64f4b4da945579a082c6f99bd797635e62befd0'跳过:[our-httpd-20191004-131941266141-cont]TASK[监听所有网络接口。]*************************************************更改:[our-httpd-20191004-131941266141-cont]TASK[将我们的文件复制到httpd的webroot]*************************************************已更改:[our-httpd-20191004-131941266141-cont]播放回顾****************************************************************************our-httpd-20191004-131941266141-cont:ok=3changed=2unreachable=0failed=0skipped=1rescued=0ignored=0GettingimagesourcesignaturesCopyingblobsha256:4650c04b851c62897e9c02c6041a0e3127f8253fafa3a09642552a8e77c044c8Copyingblobsha256:87b740bba596291af8e9d6d91e30a01d5eba9dd815b55895b8705a2acc3a825eCopyingblobsha256:82c21252bd87532e93e77498e3767ac2617aa9e578e32e4de09e87156b9189a0Copyingconfigsha256:44c6dc6dda1afe28892400c825de1c987c4641fd44fa5919a44cf0a94f58949fWritingmanifesttoimagedestinationStoringsignatures44c6dc6dda1afe28892400c825de1c987c4641fd44fa5919a44cf0a94f58949fImage'our-httpd'wasbuiltsuccessfully\o/镜像构建完毕,可以运行容器了:#podmanrunour-httpdAH00558:httpd:无法可靠地确定服务器的完全限定域名,使用10.88.2.106。全局设置'ServerName'指令以抑制此消息是否提供文件了?首先,找出容器的IP:#podmaninspect-f'{{.NetworkSettings.IPAddress}}'7418570ba5a010.88.2.106你现在可以检查:$curlhttp://10.88.2.106/our-file.txtAnsible是?你的文件内容是什么?这只是使用Ansible构建容器镜像的介绍。如果您想了解更多关于ansible-bender可以做什么的信息,请查看其GitHub页面。快乐的建筑!
