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