Docker 简介
docker 是什么
- 应用容器引擎
- 基于内核虚拟化技术: Linux Container
- 开源的
- Go 语言编写
- 理念————容器:
- 标准化包:将应用和依赖打包成一个可移植的容器(镜像),
- 任意系统:可发布、运行到任意 docker 引擎上,
- 进程级隔离:进行沙箱运行机制,程序之间相互隔离
基本架构:C/S
- Server: Dcoker daemon 作为服务端接受来自客户端请求, 并处理这些请求, 比如创建运行容器等
- Client: 主要是 Cli 命令行,客户端为用户提供一系列指令与 Docker daemon 交互
- 通过 restful api 进行通信
有人命名为:洋葱模型
- 远程还有个 Registry 存储仓库,类似 github 一样,有公共的 dockerhub,也可以自己搭私有的仓库
技术组件
- LXC: Linux 容器技术,共享内核,容器共享宿主机资源,使用 namespace 和 cgroups 对资源限制与隔离。
- Cgroups(control groups): Linux 内核提供的一种限制单进程或者多进程资源的机制;比如 CPU、内存等资源的使用限制。
- NameSpace:命名空间,也称名字空间, Linux 内核提供的一种限制单进程或者多进程资源隔离机制;一个进程可以属于多个命名空间。 Linux 内核提供了六种 NameSpace:
- UTS:文件
- IPC:通信
- PID:进程
- Network:网络
- Mount:
- User:用户
- UFS(UnionFS):联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型;成员目录称为虚拟文件系统的一个分支(branch)
- AUFS(advanced multi layered unification filesystem):高级多层统一文件系统,是 UFS 的一种,每个 branch 可以指定 readonly(只读)readwrite(读写)和 whiteout-able(wo 隐藏)权限;一般情况下, aufs 只有最上层的 branch 才有读写权限,其他 branch 均为只读权限。
和虚拟机对比
同样是虚拟化技术,它和虚拟机的区别:
- 更快,启动时间快:Docker 秒级, KVM 分钟级。
- 更轻,轻量级:容器资源占用小,要比虚拟机部署更快速。
- 容器镜像大小通常以 M 为单位,
- 虚拟机以 G 为单位。
- 更好,性能:
- 容器共享宿主机内核,系统级虚拟化,占用资源少,没有 Hypervisor 层开销,容器性能基本接近物理机;
- 虚拟机需要 Hypervisor 层支持,虚拟化一些设备,具有完整的 GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。
- 要求低:使用要求
- KVM 基于硬件的完全虚拟化,需要硬件 CPU 虚拟化技术支持;
- 容器共享宿主机内核,可运行在主流的 Linux 发行版,不用考虑 CPU 是否支持虚拟化技术
- 不太安全:由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全隐患。
- 各有优势,结合使用最好了~~
- 历史发展:主机-集群-服务器-虚拟机-容器
应用场景
- 打包/部署:应用打包与部署自动化:
- 构建标准化的运行环境;现在大多方案是在物理机和虚拟机上部署运行环境,面临问题是环境杂乱、完整性迁移难度高等问题,容器即开即用。
- CI/CD: 自动化测试和持续集成/部署:自动化构建镜像和良好的 REST API,能够很好的集成到持续集成/部署环境来。
- 弹性:部署与弹性扩展:由于容器是应用级的,资源占用小,弹性扩展部署速度要更快。
- 微服务:Docker 这种容器华隔离技术,正式应对了微服务理念,将业务模块放到容器中运行,容器的可复用性大大增加了业务模块扩展性
- 原文作者:战神西红柿
- 原文链接:https://tomatoares.github.io/posts/cloud/docker/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。