docker发展历程
docker本身不是容器,它只是一个更加易用的前端管理器。
最早期的容器技术概念是用chroot来实现隔离,但是chroot只是提供了对进程文件目录虚拟化的功能,不能防止进程恶意访问系统。
直到2008年 LXC(Linux Containers"牛奶牌牛奶"),一套完整的Linux容器管理实现方案,也有如别的方案如:OpenVZ等...
docker发展历程
lxc --> libcontainer --> runC
docker在起步阶段使用lxc,但发现其并不是那么好用,于是docker公司就自己把cgroups和lxc做了一个联合封装。lxc向上提供的接口做了二次封装,使其变成更易用的容器管理界面和容器管理逻辑。从而使得整个容器的使用变得更加简便了。
容器的核心组件:
- NameSpaces :名称空间
仅能做到隔离,而不能做到资源分配的问题。PID,user,hostname,network都属于内核的,所以需要隔离开来。
rootfs: 根文件系统(mount)
PID
user
hostname /proc/system/hostname
network
ipc : 进程间通信(Inter-Process Communication)
- Control Groups: 控制组
他能够实现以进程为单位,来尝试着把我们的CPU的时间分配,用量分配,内存空间分配,IO用量分配以指定比例或指定数量的方式分派给多个进程。
- Chroot : 为了安全的目的等如Selinux
docker的重要概念
- images : read only
- containers : A container is a runable instance of an image. You can create,run,stop,move,or delete a container using the Docker API or CLI.
- networks
- volumes
后面会有对应的博客介绍其原理
docker 组件
物理: http协议进行通信
Client
daemon
registry
逻辑:
Containers
Images
Registry