什么是docker
Docker 是 dotCloud 公司开源的一款产品,2013年开源(基于golang开发)。
Docker 英文意思是“搬运工", 是一种容器化技术,将您的运行软件封到一个沙盒里,随意搬运的应用容器引擎。
容器技术是所有云应用的基石,也把互联网升到到下一代。足以说明 docker 的强大之处。
Google 自2004年开始使用容器技术,对Docker的贡献之大,开源了Cgroup和Imctfy项目,还开源了容器管理系统 Kubernetes.
向开源致敬!
Docker 架构
采用 c/s 模式体系架构, Docker 客户端与 Docker Daemon 守护进程通信。
- Docker Daemon: 是Docker服务端的守护进程, 用来监听 Docker API 的请求和管理 Docker 对象,比如镜像、容器、网络和 Volume。
- Docker Client: docker client 是我们和 Docker 进行交互的最主要的方式方法
- Docker Registry:用来存储 Docker 镜像的仓库
- Images:镜像,镜像是一个只读模板
- Containers:容器,容器是一个镜像的可运行的实例,容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间
- 底层技术支持:Namespaces(做隔离)、CGroups(做资源限制)、UnionFS(镜像和容器的分层)
Docker 核心技术
Docker 的基础是 Linux 容器(LXC) 等技术
三大底层技术实现 Docker 的关键技术
- Namespaces 解决了进程,网络及文件系统的隔离
- 命名空间(namespaces)是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法
- CGroups 解决了CPU,内存等资源隔离
- Namespaces 并不能够为我们提供物理资源上的隔离。比如CPU,内存等。这样会导致多个Docker抢占物理资源。
- Control Groups(简称 CGroups)就是能够隔离宿主机器上的物理资源,例如 CPU、内存、磁盘 I/O 和网络带宽。
- UnionFS 解决了镜像隔离
- Union File System,联合文件系统
- 将多个不同位置的目录联合挂载到同一个目录,将相同的部分合并