Docker简介
什么是容器?
- 一种虚拟化的方案
- 操作系统级别的虚拟化
- 只能运行相同或相似内核的操作系统
- 依赖于Linux内核特性:Namespace和Cgroups(Control Group)
Linux容器技术 vs 虚拟机
- 磁盘占用空间更少,使用虚拟机部署应用不但包含应用和其依赖的库,还要包含完整的操作系统,而容器只需要包含应用和其依赖的库,资源占用空间大大减少
- 虚拟机需要模拟硬件的行为,对内存和CPU损耗大
什么是Docker?
- 将应用程序自动部署到容器
- Go语言开源引擎 http://github.com/docker/docker
- 2013年初 dotCloud
- 基于Apache 2.0 开源授权协议发行
Docker的目标
- 提供简单轻量的建模方式
- 职责的逻辑分离(开发人员只需要关心容器中运行的程序,而运维人员只需要关心如何管理容器,加强开发人员写代码的开发环境与应用程序要部署的生产环境的一致性)
- 快速高效的开发声明周期 (缩短代码从开发、测试到部署上线运行的周期,让应用程序具备可移植性,在容器中开发,以容器的形式交付和分发,这样开发、测试、生产都使用相同的环境,也就避免了额外的调试与部署上的开销,就能有效的缩短产品的上线周期)
- 鼓励使用面向服务的架构(Docker推荐一个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下应用程序或服务都可以表示为一系列内部互连的容器,从而使分布式部署服务,扩展或调试应用程序都变得非常简单 高内聚,低耦合,单一任务 避免在同一个服务器上部署不同服务时,可能带来的服务之间的互相影响,在运行过程中出现问题,也好定位问题的所在)
Docker的使用场景
- 使用Docker容器开发、测试、部署服务。
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
Docker的基本组成
- Dcoker Client客户端
- Dcoker Daemon守护进程
- Dcoker Image镜像
- Dcoker Container容器
- Dcoker Registry仓库
Dcoker 客户端/守护进程
- C/S架构
- 本地/远程
- Dcoker镜像
- 容器的基石
- 层叠的只读文件系统
- 联合加载(union mount)

Docker Container容器
- 通过镜像启动
- 启动和执行阶段
- 写时复制(copy on write)

Docker Registry仓库

Docker容器相关技术简介
Docker依赖的Linux内核特性
- Namespaces命名空间
- Control groups(cgroups)控制组
Namespaces命名空间
编程语言
封装------>代码隔离
操作系统
系统资源的隔离
进程、网络、文件系统
Namespaces命名空间
- PID(Process ID)进程隔离
- NET(Network)管理网络接口
- IPC(InterProcess Communication)管理跨进程通信的访问
- MNT(Mount)管理挂载点
- UTS(Unix Timesharing System)隔离内核和版本标识
Control groups控制组
用来分配资源
来源于google
Linux kernel 2.6.24@2007
Control groups控制组
Docker容器的能力
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离:每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器
Docker基础
原文:https://www.cnblogs.com/fjfan/p/10797919.html