基于 Go 的开源应用容器引擎 Docker
快速了解 Docker
快速了解 docker 的小视频
【docker是什么?和kubernetes(k8s)是什么关系?-哔哩哔哩】
- Docker 是一款能将程序和环境一起打包并运行的工具软件。Docker 作为中间层,使得应用和机器基础架构分离,从而实现不同架构下的快速交付部署。
- 程序和环境打包构建成一个容器镜像文件,根据 Dockerfile 构建出容器镜像,Dockerfile 中设置包括指定环境的基础镜像(如 ubuntu/centos、python/go 等等)以及后续需执行的命令(比如安装依赖、运行服务等)。
- 部署环境部署容器镜像,就会在 Linux 上以一个进程的形式运行该 docker 容器,利用操作系统的用户空间构建出应用所需的环境,运行相应服务。
- Docker Registy:相当于 docker 镜像的代码仓,也就是镜像仓,可以将 docker 镜像推到 Registy,部署环境再从 Registy 拉取镜像。
- Docker Compose:一整套服务经常包含多个 docker 镜像部署到单节点,这时候就可以使用 Docker Compose 来部署,通过 yaml 文件呢规定各个 docker 镜像间的部署顺序与其他部署配置信息。
- Docker Swarm:解决一整套服务在多个节点间的部署问题,如迁移、扩缩容。
- k8s:与 Docker Swarm 类似,也是解决一整套服务在多个节点间的部署问题,如迁移、扩缩容。
虚拟化过程
物理机
物理机存在的痛点:
- 各个应用会共享依赖库,所以有可能存在不同应用依赖有冲突的问题,比如需要同一个依赖的不同版本
- 低使用率,可能仅有几个应用在运行,却得占用一整台物理机
- 爆炸半径大,比如改变一个应用的依赖,可以会导致另一应用变得不可用
- 开关机慢
- 创建和搭建物理机慢
虚拟机
物理机上的 Hypervisor 会从物理机分离出独立的资源池,在这个资源池中生成虚拟化硬件以及与物理机相同的上方结构。
Hypervisor 分为两类:
- Type 1:不依赖物理机上的 OS,比如 VMware、Hyper-V
- Type 2:依赖物理机上的 OS,比如 Virtual Box
虚拟机一定程度上缓解了物理机的问题。
- 应用运行在不同的虚拟机上,实现相互隔离,解决了依赖冲突问题
- 可以根据需要分配相应的规格,提高使用率
- 减小了爆炸半径
- 开关机变为分钟级
- 最大的好处:可以快速构建虚拟机
容器
容器的载体可以是物理机也可以是虚拟机,和虚拟机的 Hypervisor 相对,容器通过 Container Runtime 控制。
容器与虚拟机的最大不同点:
- 虚拟机复制了一份 Linux 内核
- 容器并不存在内核,而是与载体的 OS 共用一个内核
容器的好处:
- 无依赖冲突问题
- 进一步提高了资源利用率。虚拟机还需要构造一套 OS,而容器可以直接依赖于宿主机的 OS
- 进一步减小了爆炸半径。每个容器所占的资源相对更少了,爆炸半径也就相对减小。不过其实隔离性是不如虚拟机的
- 开关容器时间短(秒级)
- 极快速部署
日常结构
Docker 架构
Docker 采用 client-server 架构,由 Docker Client 发出指令,命令 Docker daemon 构建、运行、分发 Docker containers。Docker Client 和 Docker daemon 可以运行在同一个节点,也可以用 Docker Client 控制远程的 Docker daemon。
镜像 Image
容器镜像是一个由程序和环境构建出的标准包,包括了用来运行容器所需的文件、二进制文件、库以及配置。
容器 Container
Ubuntu 中安装 Docker Engine
https://docs.docker.com/engine/install/ubuntu/
卸载老版本
1
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
更新 Ubuntu 源列表
1
apt-get update
安装 docker 依赖包
1
apt-get install ca-certificates curl
添加 docker 官方 GPG 密钥
1
2
3install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc添加 docker 官方库
1
2
3
4echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null更新 Ubuntu 源列表
1
apt-get update
安装 docker
1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
查看 docker 服务运行状态
1
systemctl status docker
Docker 从构建到部署
Docker 镜像构建
Docker 镜像仓
Docker 容器部署
Docker 命令
查看正在运行的容器
1 | docker ps |
查看所有容器
1 | docker ps -a |
开启容器
1 | docker start <CONTAINER ID> |
停止容器
1 | docker stop <CONTAINER ID> |
执行命令
1 | docker exec -it <CONTAINER ID> <CLI> |