Docker-学习笔记(一)
- 虚拟机类型
- Host型
- Hyper型
- 容器型
- Docker的优势
- Docker的劣势
- Docker的组件
- Docker Engine
- Docker Compose
- Docker Registry
- Docker Machine
- Docker Swarm
- Docker Kitematic
- Docker Hub
- Docker的内部结构
- namespace
- cgroup(control group)
- 网络
- 连接机能(link)
- ip a
- 外部通信
虚拟机类型
Host型
在主机OS上通过虚拟软件的驱动搭建虚拟环境
例;VirtualBox、VMWare
Hyper型
通过硬件上的Hyper技术实现虚拟的技术,不通过主机OS直接控制硬件。
例;KVM、Hyper-V、Xen
容器型
通过运行在主机上的容器驱动,实现多个虚拟环境的技术
Docker的优势
- 处理速度快
不需要为每一个VM分配CPU,内存,存储等资源,减少处理目的以外的访问时间
每台VM因为没有OS,消费的资源也比较少 - 启动快
不用启动OS,直接service启动即可 - 可移植性高
正像Docker所推崇的,集装箱一样,打包即走,集装箱内配置好环境和各种设置的话,可以即时使用
还可以通过Dockerfile或者Docker-compose实现infra的代码化 - 共享性
通过DockerHub等的管理,image的共享管理
Docker的劣势
依赖于base主机的OS
Docker的组件
Docker Engine
Docker image作成,容器启动等的Docker核心组件,
利用Linux的内核机能实现主处理,以Docker daemon形式动作。
Docker Compose
集中管理复数Docker容器的组件。
Docker Registry
公开/分享 Docker image的组件
Docker Machine
在非Linux环境,使用命令自动生成Docker实行环境的组件
Docker Swarm
容器的cluster集中化管理组件。
K8s是市场的开源代表。
Docker Kitematic
Docker的GUI工具组件
Docker Hub
Docker Hub是官方的库服务器。
Docker的内部结构
namespace
Docker使用Linux的名称空间机能实现容器的分区化。
Linux利用名称空间的概念,把不同的process放在不同的名称空间内实现容器化的隔离。有6种名称空间。
- PID:程序关联
- Network:IP地址,端口,路由,过滤等网络相关
- UID/GID:用户ID,群组ID相关
- MOUNT:外挂相关
- UTS:host名,domain名等相关
- IPC:信息队列等程序间通信相关
cgroup(control group)
Docker使用Linux的cgroup机能实现物理主机的资源(CPU,内存等)管理控制。
通过把process分组化,实现各个组的资源使用量限制。
网络
连接机能(link)
给每个容器分配一个虚拟NIC(eth0),172.17.0.0/16 段的IP由DHCP分割。
各容器的虚拟NIC(eth0)由主机上的一个桥(docker0)端口连接,相当于桥接器的作用,实现各容器之间的连接机能。该机能仅限一台物理主机,多台物理主机之间不能实现互联。
ip a
通过该命令查看主机Host上的桥接器的inferface
(省略)
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:bd:f7:d8:19 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
外部通信
Docker使用Linux内核的iptables机能,实现hostOS的外部通信。
docker0和hostOS的物理NIC之间利用NAPT(Network Address Port Translation)实现私网到公网的通信。