什么是DevOps?
简单理解DevOps是一种将研发、测试 、运维结合起来的一种思路。
维基百科对 DevOps 的定义:
容器如何助力 DevOps?
Docker 可以在 DevOps 各个阶段发挥重要作用,例如 Docker 可以帮助我们在开发阶段提供统一的开发环境,在持续集成阶段帮助我们快速构建应用,在部署阶段帮助我们快速发布或更新生产环境的应用。
下面我们来详细认识一下 Docker 在整个 DevOps 阶段究竟发挥了哪些作用。
开发流程
开发人员可以在本地或者开发机上快速安装一个 Docker 环境,然后使用 Docker 可以快速启动和部署一个复杂的开发环境。相比传统的配置开发环境的方式,不仅大大提升了开发环境部署的效率,同时也保证了不同开发人员的环境一致。
集成流程
通过编写 Dockerfile 可以将我们的业务容器化,然后将我们的 Dockerfile 提交到代码仓库中,在做持续集成的过程中基于已有的 Dockerfile 来构建应用镜像,可以极大提升持续集成的构建速度。
这主要是因为 Docker 镜像使用了写时复制(Copy On Write)和联合文件系统(Union FileSystem)的机制。Docker 镜像分层存储,相同层仅会保存一份,不同镜像的相同层可以复用,比如 Golang 容器在一次构建停止后,镜像已经存在于构建机上了,当我们开始新一轮的测试时,可以直接复用已有的镜像层,大大提升了构建速度。
部署流程
镜像仓库的存在使得 Docker 镜像分发变得十分简单,当我们的镜像构建完成后,无论在哪里只需要执行 docker pull 命令就可以快速地将镜像拉取到本地并且启动我们的应用,这使得应用的创建或更新更快、更高效。
另外,Docker 结合 Kubernetes 或者其他容器管理平台,可以轻松地实现蓝绿发布等流程,当我们升级应用观察到流量异常时,可以快速回滚到稳定版本。
DevOps 工具介绍
工欲善其事,必先利其器,要想顺利落地 DevOps,工具的选择十分重要,下面我们来看下除了Docker 外还有哪些工具可以帮助我们顺利地构建 DevOps 平台。
Git
Git 是一种分布式的版本控制工具, 是目前使用最广泛的 DevOps 工具之一。Git 相比于其他版本控制工具,它可以实现离线代码提交,它允许我们提交代码时未连接到 Git 服务器,等到网络恢复再将我们的代码提交到远程服务器。
Git 非常容易上手,并且占用空间很小,相比于传统的版本控制工具(例如:Subversion、CVS 等)性能非常优秀,它可以帮助我们快速地创建分支,使得团队多人协作开发更加方便。
目前全球最大的在线 Git 代码托管服务是 GitHub,GitHub 提供了代码在线托管服务,可以帮助我们快速地将 DevOps 工作流集成起来。除了 GitHub 外,还有很多在线代码托管服务,例如 GitLab、Bitbucket 等。
Jenkins
Jenkins 是开源的 CI/CD 构建工具,Jenkins 采用插件化的方式来扩展它的功能,它拥有非常丰富的插件,这些插件可以帮助我们实现构建、部署、自动化等流程。它还拥有强大的生态系统,这些生态系统可以很方便地与 Docker 和 Kubernetes 集成。Jenkins 几乎可以和所有的 DevOps 工具进行集成。
Ansible
Ansible 是一个配置管理工具。Ansible 可以帮助我们自动完成一些重复的 IT 配置管理,应用程序部署等任务,还可以帮助我们放弃编写繁杂的 shell 脚本,仅仅做一些 YAML 的配置,即可实现任务下发和管理工作。并且 Ansible 的每一行命令都是幂等的,它允许我们多次重复执行相同的脚本并且得到的结果都是一致的。
Kubernetes- K8S
Kubernetes 是当前最流行的容器编排工具之一,Docker 帮助我们解决了容器打包和镜像分发的问题,而 Kubernetes 则帮助我们解决了大批量容器管理和调度的问题,它可以打通从研发到上线的整个流程,使得 DevOps 落地更加简单方便。
docker助力DevOps更好发展
DevOps 虽然已经被提及很多年,但是一直没有很好的落地,直到 2013 年 Docker 的诞生,才使得 DevOps 这个理念又重新火了起来,因为 Docker 为我们解决了应用的构建、分发和隔离的问题,才使得 DevOps 落地变得更加简单。
DevOps 提倡小规模和增量的服务发布方式,并且 DevOps 还指导我们尽量避免开发大单体(把所有的功能都集成到一个服务中)应用,这一切,都与 Docker 所能提供的能力十分匹配。因此,Docker 是非常重要的 DevOps 工具。