Docker 是一种操作系统级别的虚拟化实现方案,依赖于Linux内核特性 Namespace 和 Cgroup 实现。常用应用程序的开发、测试、部署服务。
Docker 简介
什么是 Docker
- 将应用程序自动部署到容器中
- 只能运行相同或相似内核的操作系统
- 基于apache2.0 开源
Docker 的目标
- 提供简单轻量级的建模方式
- 职责的逻辑分离
- 快速高效的开发生命周期(开发,测试,生成相同环境)
- 鼓励使用面向服务的架构(1个docker 仅运行一个服务)
Docker 的优点
Docker 的使用场景
- 使用Docker 容器开发、测试、部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台及服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
Docker 的基本组成
Docker Client
-> Docker Engine
-> Containerd
-> containerd-shim
-> runC
-> container
Docker Client 客户端
Docker Daemon 守护进程
Docker Image 镜像
容器的基石
层叠的只读文件系统
- add Apache
- add emacs
- rootfs
- bootfs
联合加载系统
Docker Container 容器
通过镜像启动
启动和执行阶段
- 可写层
- add Apache
- add emacs
- rootfs
- bootfs
重要技术:写时记录
Docker Registry 仓库
docker query tutorial
docker ps -l
docker commit id learn/ping
docker run learn/ping ping google.com
docker ps
docker inspect <id>
docker images
docker push learn/ping
Docker 容器相关技术简介
Namespaces 命名空间
系统
- PID (Process ID) 进程隔离
- NET (Network) 管理网络接口
- IPC (InterProcess Communication)管理跨进程通信的访问
- MNT (Mount) 管理挂载点
- UTS (Unix Timesharing System)隔离内核和版本标识
Control groups控制组
- 用来分配资源
- 来源于 google
- Linux kernel 2.6.24@2017
Docker 容器能力
- 文件系统格式:每个容器都有自己的 root 文件系统
- 进程隔离:每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用Cgroups将CPU和内存之类的资源独立分配给每个Docker 容器