ansible 容器部署_如何使用Ansible Container管理Linux容器

史昱
2023-12-01

ansible 容器部署

我喜欢容器,每天都在使用这项技术。 即使这样,容器也不是完美的。 但是,在过去的几个月中,出现了一系列解决我所遇到的问题的项目。

我开始在Docker中使用容器,因为该项目使该技术如此流行。 除了使用容器引擎之外,我还学习了如何使用docker-compose并开始使用它来管理我的项目。 我的生产力飞涨! 一个命令,无论它多么复杂,都可以运行我的项目。 我很高兴。

一段时间后,我开始注意到问题。 最明显的是与创建容器映像的过程有关。 Docker工具使用自定义文件格式作为配方来生成容器映像-Dockerfile。 这种格式很容易学习,短时间后您就可以自己制作容器图像了。 一旦您想掌握最佳实践或考虑到复杂的情况,就会出现问题。

Ansible 。 你知道的? 太棒了吧? 你不是吗 好了,该学习新知识了。 Ansible是一个项目,可让您通过编写任务并在您选择的环境中执行任务来管理基础结构。 无需安装和设置任何服务; 一切都可以从笔记本电脑轻松运行。 许多人已经拥抱Ansible。

想象一下这种情况:您对Ansible进行了投资,编写了许多用于管理基础结构的Ansible角色和剧本,并且您正在考虑对容器进行投资。 你该怎么办? 开始通过Shell脚本和Dockerfile编写容器映像定义? 听起来不对。

Ansible开发团队的一些人问了这个问题,并意识到人们每天编写和使用的那些相同的Ansible角色和剧本也可以用来制作容器图像。 不仅如此,它们还可以用于管理容器化项目的整个生命周期。 基于这些想法, Ansible Container项目诞生了。 它利用了现有的Ansible角色,这些角色可以转变为容器映像,甚至可以用于从构建到生产部署的整个应用程序生命周期。

让我们谈谈我提到的有关Dockerfiles最佳实践的问题。 一个警告:这将是非常具体和技术性的。 以下是我遇到的前三个问题:

1.嵌入在Dockerfiles中的Shell脚本。

在编写Dockerfile时,您可以指定一个脚本,该脚本将通过/ bin / sh -c进行解释。 可能是这样的:


RUN dnf install -y nginx 

其中RUN是Dockerfile指令,其余是其参数(传递给shell)。 但是,想象一个更复杂的场景:



   
   
RUN set -eux ; \
    \
# this "case" statement is generated via "update.sh"
    % ARCH-CASE % ; \
    \
    url = "https://golang.org/dl/go ${GOLANG_VERSION} . ${goRelArch} .tar.gz" ; \
    wget -O go.tgz " $url " ; \
    echo " ${goRelSha256} *go.tgz" | sha256sum -c -; \

这是从官方golang图片中获取的 。 看起来不漂亮吧?

2.您无法轻松解析Dockerfile。

Dockerfile是一种没有正式规范的新格式。 如果您需要在基础架构中处理Dockerfile,这将非常棘手(例如,稍微自动化构建过程)。 唯一的规格是代码dockerd的一部分。 问题是您不能将其用作库。 最简单的解决方案是自己编写一个解析器,并希望做到最好。 使用某些著名的标记语言(例如YAML或JSON)会更好吗?

3.很难控制。

如果您熟悉容器图像的内部结构,则可能会知道每个图像都是由图层组成的。 创建容器后,使用联合文件系统技术将各层堆叠在一起(例如煎饼)。 问题在于,您无法显式控制此分层-您不能说“在这里开始新的层”。 您被迫以可能会损害可读性的方式更改Dockerfile。 更大的问题是,必须遵循一系列最佳实践才能获得最佳结果-新来者在这里很难过。

比较Ansible语言和Dockerfiles

与Ansible相比,Dockerfiles的最大缺点是Ansible作为一种语言要强大得多。 例如,Dockerfile没有直接定义变量的概念,而Ansible具有完整的模板系统(变量只是其功能之一)。 Ansible包含大量易于使用的模块,例如wait_for ,可用于服务准备情况检查-例如,等到服务准备就绪后再继续。 使用Dockerfiles,所有内容都是shell脚本。 因此,如果您需要弄清楚服务准备情况,则必须使用外壳(或单独安装)来完成。 Shell脚本的另一个问题是,随着复杂性的增加,维护成为负担。 许多人已经弄清楚了,并将这些shell脚本转换为Ansible。

如果你有兴趣这个主题,并想了解更多,请前来开源峰会在布拉格看到我的介绍上周一,10月23日下午4:20在距离Palmovka房间。

在10月23日至26日在布拉格举行的欧盟开源峰会上 ,Tomas Tomecek的演讲( 从Dockerfiles到Ansible Container)中了解更多信息。

翻译自: https://opensource.com/article/17/10/dockerfiles-ansible-container

ansible 容器部署

 类似资料: