容器在“基础设施即代码(Infrastructure as Code)”中有什么意义?

一句话概括的话,容器意味着一切。

为什么这么说呢?当你在比较单体应用和微服务时,一定会有一些权衡和取舍。一方面,从单体模型转移到微服务模型,能够将进程分离成独立的工作单元。这使得开发者们可以将注意力放在单一功能上,并且有助于测试和扩展。另一方面,由于将所有的东西都分成了单独的服务,过去你只需管理一个单一部署单元的基础设施,现在你却必须管理每一个服务的基础设施。正是为了应对这一挑战,“基础设施即代码”作为一个解决方案便诞生了。

容器技术已经存在一段时间了,它以不同的形式实现且已取得不同程度的成功。这项技术从上世纪80年代初的chroot开始,并在之后带来了如Virtuozzo和Sysjail这样形式的产品。直到2013年Docker的诞生和其后的迅猛发展,一切才化零为整,才真正开始深刻影响了应用程序在容器模型中的开发、测试和部署。

“基础设施即代码”的实践,和Docker容器一起,象征着一个最具颠覆性和创新性的改变,它影响了我们今天开发和发布软件的过程。

什么是“基础设施即代码”(IaC)?

在深入探讨IaC及它和容器的关系之前,先看看IaC的具体含义吧。IaC指的是开发应用程序本身的同时,对硬件和操作系统需求的供应编写脚本的实践。通常,管理这些脚本的方式和软件代码库类似,包括版本控制和自动化测试。

当正确执行时,脚本将代替管理员登陆新机器并进行配置。这些脚本描述了新机器的理想状态,并会执行必要的步骤来配置机器,以实现一状态。

“基础设施即代码”带来的核心便利

IaC旨在利用系统配置来缓解最常见的痛点,特别是以前配置一个新环境通常需要花费大量的时间。每一个环境都需要单独配置,且如果某处出现错误,通常需重新进行整个过程。IaC消除了这些痛点,并向开发者和运维人员提供了以下额外的便利:

  1. 重新使用常见的脚本变得相对简单了。
  2. 整个供应过程可实现自动化,连供应硬件都可以作为持续交付过程的一部分。
  3. 版本控制,可以根据需要测试和回滚较新的配置。
  4. 同行审查和脚本强化。不需手动地从文档或内存中配置,就可以对脚本进行审查、更新和持续改进。
  5. 文档是自动的,因为本质上它就是脚本本身。
  6. 过程可以被测试。

容器,将“基础设施即代码”带向新高度

作为开发者,我想我们都遇到过诸如“我不知道啊,反正它在我的机器上工作!”这样的情况。往好处说,这是一种诙谐有趣的说法;但往坏处说,它代表了我们每天都要处理的一个很大的问题。Docker这一革新性的技术不仅有效消除了开发者的这些担忧,它还使得IaC在开发过程中成为一个核心组件。

为了更好地说明这一点,让我们想象一个已经Docker化的Web应用,它有简单的UI界面。该应用将有一个类似于如下所示的Dockerfile,具体说明了包含该应用的容器的配置信息。

FROM ubuntu:12.04# Install dependencies
RUN apt-get update -y && apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql# Install app
RUN rm -rf /var/www/*
ADD src /var/www# Configure apache
RUN a2enmod rewrite
RUN chown -R www-data:www-data /var/www
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2EXPOSE 80CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

如果你熟悉Docker,这是一个相当典型和简单的Dockerfile,你应该已经知道了它是什么。如果你不熟悉Dockerfile,那么可以理解为,这个文件将用于创建一个Docker镜像,它本质上是一个用来创建容器的模板。Docker容器创建完毕后,镜像将用于构建容器,于是一个自包含的应用程序就这么产生了。从开发工作站到高可用云集群,它可以在已经将其实例化的任何机器上使用。

我们看一下文件中的几个关键参数,并看看它们在过程中实现了什么:

FROM ubuntu:12.04

这一行是从Docker Hub中拉取一个Ubuntu Docker镜像,作为新容器的基础。Docker Hub是主要的Docker镜像在线仓库。如果你访问Docker Hub并在其中搜索这个镜像,你就能找到Ubuntu镜像仓库了。这是一个官方镜像,是由Docker支持的专门团队负责管理的。使用该镜像的好处是,当你的底层技术出现问题时,很有可能已经有人开发出了修复补丁并实现了它,并且你所需要做的只是更新你的Dockerfile到新版本,重建你的镜像,并再一次测试和部署你的容器。

Dockerfile中剩下的几行将使用apt-get在基础镜像上安装各种软件包。将应用程序的源添加到/var/www目录,配置Apache,然后将容器的公开端口设置为端口80。

最后,当容器搭建好后运行CMD指令,这将初始化Apache服务器,打开它以接收http请求。

这是“基础设施即代码”最简单的形式。这就是它的全部。

此时,假如你已经在工作站上安装并运行Docker了,你可以从Dockerfile所在的目录中执行以下指令:

$ docker build -t my_demo_application:v0.1

Docker将为你构建镜像,将其命名为my_demo_application并加标签v0.1,v0.1实际是一个版本编号。镜像创建后,您可以使用以下命令获取该镜像,并使用该镜像创建容器。

$ docker run -d my_demo_application:v0.1

就像这样,你就可以在本地机器上运行你的应用程序,或者在你选择的任何硬件上运行它。

结语

一份简单的Dockerfile,可以检查你的源代码,指定应用程序的环境、配置和访问路径,这就是Docker和“基础设施即代码”的最简单形式。同时你可以使用docker compose来定义多层次服务的组合应用,每个服务都包含一个独立的Dockerfile或者导入Docker仓库的一个镜像。你还可以使用docker compose的增强版本rancher compose,这是微服务部署利器,可以让我们更加便利得玩转rolling upgrade等高级特性。

译者:刘力,Rancher Labs大中华区架构师。
原文链接:Rancher Labs

容器: 让“基础设施即代码”更容易相关推荐

  1. 容器化基础设施的威胁和风险不会更少

    小结 谈及云原生 安全时,不少人还停留在传统安全意识和观念,对 Web 攻防.系统攻防加强防范,密 码暴力破解和反弹 Shell 不会掉以轻心.然而,安全总是具有"短板效应".有时 ...

  2. 使用Helm优化Kubernetes下的研发体验:基础设施即代码

    容器即进程,Kubernetes则解决了如何部署和运行应用的问题.对于任何一个部署在Kubernetes的应用而言,通常都可以由几个固定的部分组成:Ingress.Service.Deployment ...

  3. 基于 Kubernetes 的 CICD 基础设施即代码

    在上一篇基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊 使用的基础设施是如何使用代码描述的, ...

  4. 基础设施即代码:一场变革即将到来

    出品 | <新程序员>编辑部 作为一种基于软件开发实践的基础设施自动化方法,基础设施即代码(Infrastructure as Code,可缩写为IaC)如今较为常见,但面临不断演变的技术 ...

  5. 从技术雷达看DevOps的十年 – 基础设施即代码和云计算

    在上一篇文章中,我们讲到了 DevOps 和持续交付的关系.本篇将回顾最先改变运维工作的相关技术 -- 基础设施即代码和云计算,通过技术雷达上相关条目的变动来跟踪其趋势变化. 和持续交付一样,基础设施 ...

  6. DevOps基础-4.1-基础架构自动化:基础设施即代码

    这篇开始学习第四章,第四章主要阐述基础架构自动化这个话题. 在IT系统管理领域,自动化技术并不是新的,但DevOps提升到了完全不同的自动化水平.我们将此称为基础设施即代码. 这是一种完全编程的基础架 ...

  7. 基础设施即代码:Terraform和AWS无服务器

    基础设施即代码 基础设施即代码(IaC)是一种通过机器可读的定义文件管理设备和服务器的方法.从根本上说,你要写下你希望基础设施是什么样子,以及应该在该基础设施上运行什么代码.然后,按下一个按钮,说&q ...

  8. 基于 Kubernetes 的基础设施即代码

    11 月 9.10 号两天,.NET 社区第一次以".NET 大会"为品牌在上海召开了第一届峰会,现场与会者达到 600 人规模.大会的第 1 天是各类演讲分享,第 2 天有多个动 ...

  9. 云原生时代,为什么基础设施即代码(IaC)是开发者体验的核心?

    作者 | 林俊(万念) 来源 |尔达 Erda 公众号 从一个小故事开始 你是一个高级开发工程师. 某天,你自信地写好了自动煮咖啡功能的代码,并在本地调试通过.代码合并入主干分支后,你准备把服务发布到 ...

最新文章

  1. 一、JVM及Java体系结构
  2. 设置树莓派的无线网卡为监听模式(monitor)
  3. Java基础-时间复杂度计算方式
  4. Webstorm中提示Cannot find module 'webpack.dev.conf.js'
  5. 【转】深入浅出理解有限状态机
  6. 1.Hello,Python
  7. java 反射 类名_java – 从反射中获取字段的类名
  8. c语言中浮点数如何声明,C语言中浮点数定义和文本处理的配合
  9. [转]在VS2010 VC++项目中引用Lib静态库(以Openssl为例)
  10. java注解获取参数_JAVA 自定义注解及参数获取 | 学步园
  11. Esri中国社区 » GIS大讲堂:ArcGIS Server .Net ADF中的AJAX
  12. android 美拍加表情,怎么把美拍加表情
  13. python 办公自动化 视频教程_Python自学爬虫/办公自动化视频教程
  14. 水平居中设置-定宽块状元素
  15. 波士顿大学大都会学院计算机硕士,【陈彩瑛】波士顿大学大都会学院商科专业介绍...
  16. C T1 汉字大写金额
  17. 计算机丢失GetU,u盘启动引导文件丢失如何修复
  18. Linux tar命令总结:Linux下对文件进行打包、压缩并分割成指定大小
  19. 不要再叫自己“程序员”了!
  20. vbs服务器bat文件,自动以管理员身份运行批处理bat文件(vbs与bat两种方法)

热门文章

  1. 2023/4/15 C语言学习(补)
  2. 如何写培训计划书(培训计划怎么写)浅说
  3. 七年级下学期计算机考试题,七年级信息技术试卷及答案
  4. UDP主要丢包原因及具体问题分析
  5. PE格式:手工实现各种脱壳后的修复
  6. 对口高考C语言2012年真题,2012年湖南省对口高考C语言试题(含答案).doc
  7. 为何SAP适合纺织行业解决方案
  8. 计算机管理中心主管竞聘申请书,信息主管竞聘志愿及说明.doc
  9. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——1.4 用电子琴软件弹奏MIDI音乐伴奏...
  10. 使用AdWords API设置再营销方法添加移动聚合平台教程