Docker设计思想
一个程序的执行需要CPU、存储资源,与外界通信时需要网络资源。如果对这些计算资源进行切割、限制、隔离和封装,就能使计算资源能够成为独立调度的单位:按需分配、可回收复用。这个方法称为“虚拟化”。由此诞生了虚拟机和Docker
传统部署直接在OS上跑应用,无法控制应用占用的计算资源配额;虚拟机用VM封装计算资源,可将VM跑在单个CPU内核上,但应用跑在VM中单独运行的OS上,再经由硬件抽象层Hypervisor调用宿主机OS的系统调用,开销较大;Docker用Container封装计算资源,容器是一个资源受限的entrypoint进程,复用同一个宿主机OS内核,跑容器私有的OS文件数据,相比虚拟机更加“轻量化”
在容器设计中,计算资源之间的隔离由Linux的Namespace机制实现:使得容器仅可访问设定的进程、网络、存储等信息。计算资源的分割和限制通过Linux的Cgroups机制实现:设置了entrypoint进程(及其创建的子进程)可使用的CPU、带宽、存储上限
但在容器中执行的宿主机全局读命令会依赖于宿主机信息,全局写命令会影响到宿主机,进而影响到所有容器
搭建环境
宿主机环境Ubuntu 22.04.1 LTS
Docker Engine安装
更新apt软件源
sudo apt-get update
安装CA证书、curl传输工具、gnupg加密工具
sudo apt-get install ca-certificates curl gnupg
创建目录,添加gpg密钥
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
设置repository
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新apt软件源
sudo apt-get update
安装最新版本Docker Engine核心组件
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
参考资料
Kubernetes Documentation Concepts Overview
CNCF X 阿里巴巴云原生技术公开课
Docker官网手册