Docker新手入门简介(1)|青训营

85 阅读6分钟
Docker 并不等同于传统的 Linux 容器。Docker 技术最初是基于 [LXC] 技术构建,但后来它逐渐摆脱了对这种技术的依赖。LXC 可用作轻量型虚拟化技术,但它对开发人员和用户来说体验不甚理想。除了运行容器之外,Docker 技术还具备其他多项功能,包括简化用于构建容器、传输镜像以及控制镜像版本的流程。

Docker 与 Linux 容器的区别

传统的 Linux 容器使用 init 系统来管理多种进程。这意味着,所有应用都作为一个整体运行。与此相反,Docker 技术力争让应用各自独立运行其进程,并提供相应工具,帮助实现这一功能。这种精细化运作模式自有其优势。

Docker 容器的优势是什么?

模块化

Docker 容器化方法注重在不必停止整个应用的情况下,单独提取部分应用进行更新或修复的能力。除了这种基于微服务的方法,您还可以采用与[面向服务的架构]类似的方法,在多个应用间共享进程。

层和镜像版本控制

每个 Docker 镜像文件都包含多个层,它们组合成一个镜像。每当镜像发生改变时,就会创建一个新的镜像层。每当用户指定命令时,例如 run 或 copy,就会创建一个新的层。

Docker 可重复利用这些层来构建新容器,因而加快了构建过程。镜像之间共享中间变化,进一步提升了速度、[规模]以及效率。版本控制也是层所固有的功能:每次发生新的更改时,您大都会获得一个内置的更改日志,拥有对容器镜像的全盘管控。

回滚

回滚也许是层最值得一提的功能。每个镜像有多个层。不喜欢镜像的当前迭代?将它回滚到上一版本。这一功能还支持敏捷开发方法,帮助实现[持续集成和部署(CI/CD)],使其在工具层面成为一种现实。

快速部署

新硬件的启用、运行、置备和供应在过去需要耗费数日,所需的投入和开销也很繁重。基于 Docker 的容器可以将部署缩短到只用几秒。通过为每个进程创建容器,您可以快速将这些进程共享给新的应用。而且,添加或移动容器时无需重启操作系统,大大缩短了部署时间。除了部署时间更短外,您还可以轻松无虞、经济高效地创建和销毁容器创建的数据。

因此,Docker 技术是一种更加精细、可控、基于微服务的技术,可为企业提供更高的效率价值。

使用 Docker 有什么局限?

Docker 本身能够管理单个容器。但随着您开始使用越来越多的容器和容器化应用,并把它们划分成数百个部分,很可能会导致管理和编排变得困难。最终,您需要后退一步,对容器实施分组,以便跨所有容器提供诸如网络、安全和遥测等服务。

使用 Docker,您将获得与传统 Linux 容器不同的类 UNIX 功能,包括可以随同应用一起,在容器中使用 cron 或 syslog 之类的进程。当然,在某些事情上面也存在一些限制,例如终止子进程之后,需要清理孙进程,而对于这类事情,传统 Linux 容器天生会处理。但我们可以在开始时修改配置文件和设置功能,从而消除这些顾虑,这些都是瑕不掩瑜的小问题。

在此之上,还有其他非命名空间的 [Linux]子系统和设备。这意味着,如果攻击者控制了这些子系统,主机也将不保。为了保持轻量,主机与容器共享内核,[也因此埋下了安全漏洞的隐患]。在这一点上,它与虚拟机不同,后者更加严格地与主机系统保持隔离。也可能成为安全隐患。为使用和运行 Docker 容器,您很可能需要使用 Docker 守护进程,来为容器提供持续运行时环境。Docker 守护进程需要根权限,所以我们需要特别留意谁可以访问该进程,以及进程驻留在哪个位置。例如,相比公共区域所用的守护进程(例如 Web 服务器),本地守护进程的受攻击面要小得多。

小结

  1. 微服务架构优势:微服务将应用拆分为小型、自治的服务,使开发、测试和部署更加灵活,同时提高了系统的可维护性和扩展性。
  2. Docker容器化:Docker是一种轻量级的虚拟化技术,可以将应用及其依赖封装成容器,实现环境一致性,使应用在不同环境中运行一致。
  3. 工程化实践:在微服务架构中使用Docker进行工程化包括:Docker镜像构建、使用Docker Compose管理多个服务、自动化构建和部署、容器编排工具如Kubernetes、监控与日志、安全性和访问控制、版本管理与回滚、文档和自动化等。
  4. 环境配置和变量:使用环境变量配置不同环境下的应用行为,使应用在不同环境中保持一致。
  5. 服务发现和负载均衡:容器编排工具帮助实现服务发现和负载均衡,确保请求正确地路由到可用的服务实例。
  6. 数据库和持久化:使用数据卷或数据库容器实现数据持久化,防止数据丢失。
  7. 容器资源限制:设置资源限制,避免某个服务过度消耗资源影响其他服务。
  8. 自动伸缩:容器编排工具实现自动伸缩,根据负载调整服务实例数量。
  9. 健康检查与自愈:通过健康检查,自动监控和修复服务实例的状态。
  10. 版本管理和回滚:每个版本对应一个Docker镜像,实现版本化的发布和回滚。
  11. 安全性和访问控制:使用TLS/SSL保护通信,使用令牌或密钥控制访问权限。
  12. 文档和自动化:编写详细的文档,建立自动化流程,提高开发和部署效率。

微服务架构下的Docker工程化为开发团队提供了一种灵活、高效且可控的方式来管理和部署复杂的微服务应用。它能够帮助团队更快速地交付新功能、提高系统的可靠性,并适应不断变化的业务需求。