(一)容器化技术与Docker

2018-08-08  本文已影响0人  啊冬啊冬
logo.png

我们都知道Docker是一个容器化工具,那么什么是容器呢,Docker和容器有什么关系,Docker又能解决什么问题呢?

麻烦的环境配置

软件开发最大的麻烦事之一就是环境配置,在开发之前我们需要准备各种运行环境、IDE、辅助工具。就像我们要使用电脑前,先要安装操作系统一样。

而一个可用软件的交付过程通常包含两个部分 - 开发和维护。不幸的是,我们很难保证软件开发测试和运行维护阶段的软件能运行在一模一样的环境下。开发常说:"It works on my machine",很多时候我们都要花大量的时间去配置环境和教别人配置环境。

现在的应用程序

applications.jpg

新架构的挑战

在新的应用程序架构下,我们部署应用的成本大大增加。
不但要搭建不同语言、不同技术栈适配的运行环境,还要部署到多个服务器主机上;并且这些主机还可能来自不同地方(公/私有云主机、物理主机)。

统一的管理

其实在软件开发的过程中我们就思考过类似的问题 - 如何统一的管理我们的代码包。例如,Maven、Gradle、NPM,我们使用一个相同的格式(规范)将我们的代码划分成模块,并使用一套工具去管理他们。在此之后我们不需要重复的copy代码、复制文件,只需要声明式的引入我们需要的代码包就可以了。

当然,我们希望我们的应用部署也能如此简单。

“容器”

good-container.png
app-container.png

“容器”是一个黑盒,对于它的使用者来说:

  • 无需关心里面有什么:只关注“容器”能做什么
  • 有一套工具来管理黑盒:打包、运输、运行
  • 减少了部署单元的数量,从而减少了花销:多个工具聚集在一个“容器”内
  • 更容易管理多个环境:以“容器”为单位进行部署和管理

虚拟化技术

虚拟机

容器

容器技术

容器技术已经发展了一段时间了, 例如, LXC, BSD Jails, Solaris Zones...


history.png
  • 看起来像虚拟机
    • 可以SSH到容器
    • 具有root的访问权限
    • 可以安装包
    • 可以mount文件系统
    • 拥有自己的eth0接口
    • 可以修改iptables 规则和routing table
  • 共享宿主机的内核
  • 隔离 cgroups (memory, cpu, blkio)
  • 拥有进程空间 (pid, mnt, net, ipc, uts)
    • pid - 隔离进程PID
    • mnt - 允许创建不同的文件系统层级
    • net - 隔离网络控制、iptables、防火墙、路由
    • ipc - 定义内部进程交流的范围
    • uts - 允许修改hostname

容器技术的局限

Docker

what-is-docker.png

Docker架构

docker-architecture.png docker-architecture2.png

Docker底层实现

docker-tech.png

底层实现原理详解见

Docker核心技术

core-tech.png

Docker VS VM

VM-vs-docker.png
上一篇 下一篇

猜你喜欢

热点阅读