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 容器部署

ansible 容器部署_如何使用Ansible Container管理Linux容器相关推荐

  1. ansible 容器部署_使用ansible-bender工具构建容器图像

    ansible 容器部署 容器和Ansible完美地融合在一起-从管理和编排到供应和构建. 在本文中,我们将重点介绍建筑部分. 如果您熟悉Ansible,就会知道可以编写一系列任务,而ansible- ...

  2. 容器部署不适合文件服务器,建议使用内置容器部署War文件与可执行jar

    小编典典 一个有趣的问题.这只是我对主题的看法,因此,一切都吃一盐.我偶尔使用servlet容器和嵌入式服务器来部署和管理应用程序.我敢肯定,使用servlet容器还有很多很好的理由,但我将尝试着重介 ...

  3. vm 和 容器对比_您将VM放在我的容器中

    vm 和 容器对比 史蒂夫·戈登(Steve Gordon)撰写了这篇文章. 容器和Kubernetes已被广泛推广为"破坏性"技术,它将取代它们之前的所有内容,最著名的是虚拟机( ...

  4. docker数据卷容器卷_如何删除Docker映像,容器和卷

    docker数据卷容器卷 Docker备忘单 (A Docker Cheat Sheet) 介绍 (Introduction) Docker makes it easy to wrap your ap ...

  5. linux运行容器,容器与云|如何在 Windows 上运行 Linux 容器

    1.概述 现在能够在 Windows 10 和 Windows 服务器上运行 Docker 容器了,它是以 Ubuntu 作为宿主基础的. 想象一下,使用你喜欢的 Linux 发行版--比如 Ubun ...

  6. ansible安装部署_运维日记|使用ansible批量部署crontab定时删归档任务

    在某个下午,测试同事突然找过来说,之前测试服务器搭的几套oracle数据库忘记部署删除归档脚本了,要让小编都给部署一下. ​ 数了数,有接近十套呢,一部部登陆上去,部署一个删归档脚本,然后再到cron ...

  7. ansible 并发设置_如何使用Ansible通过Prometheus设置系统监视

    ansible 并发设置 2017年夏天,我写了两篇有关使用Ansible的方法文章. 在第一篇文章之后 ,我计划显示copy , systemd , service , apt , yum , vi ...

  8. element布局容器大小_让Element-ui的Container布局容器高度百分百显示

    使用Element(2.13.1版本)的Container布局容器布局,按照官网的代码运行后不能撑开整个页面,只能显示一段高度,代码如下: Header left Main 那如何让它高度百分百显示呢 ...

  9. mysql容器操作_如何使用运行MySQL构建Docker容器?

    我的目标是拥有一个具有运行MySQL服务的docker容器.所以每当我启动容器时,数据库都处于初始状态并且MySQL正在运行. 几乎一切都很好但是当我启动容器时MySQL服务没有运行.每次在控制台中我 ...

最新文章

  1. 你必须知道的ADO.NET(一) 初识ADO.NET
  2. 42.递归算法---数的划分
  3. OD汇编指令集(不断更新)
  4. C++获取虚表中的函数并调用
  5. LeetCode 566. Reshape the Matrix
  6. 计算机科技英语论文,计算机专业英语(第2版)——科技交流与科技论文写作
  7. 台湾大学生来厦门参访交流
  8. How to Run Mac OS X in VirtualBox on Windows
  9. servlet中web.xml配置
  10. sql 不允许保存更改 解决办法
  11. python生成手写文字图片_使用PHP辅助 快速制作一套自己的手写字体实践
  12. python文件夹排序笔记
  13. Mockito 中被 Mocked 的对象属性及方法的默认值
  14. 如何利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压值?
  15. Struts验证框架与一些技巧
  16. 苹果xr十大隐藏功能_别再说苹果“悬浮球”功能不好用,隐藏的实用小技巧,每天用得上...
  17. Android Audio混音实践篇
  18. Windows下设置redis数据库允许远程访问
  19. python_在无须过多援引的情况下创建字典
  20. 求知若饥, 虚心若愚

热门文章

  1. Redis积分排行榜设计与实现第一篇
  2. 基于docker使用jenkins集成sonar
  3. springboot项目打war包流程
  4. tensorflow3
  5. 干货!总结19个提升iOS开发技术的必看教程!
  6. 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)...
  7. 关于 php 用webservice传输数据的问题(nosoap与.NET对接)此处一直困扰三天时间,终于解决...
  8. Google Chrome 1.0.154.46稳定版本发布 修复高危安全漏洞
  9. 思维导图系列之Java集合知识梳理
  10. TransD:通过动态映射矩阵嵌入(知识图谱嵌入)ACL 2015