第一部分:容器的本质
在前面的章节中, 我们使用大量的容器技术进行服务部署, 那么容器是什么东西?docker又是什么?两者有什么区别和关联?其实从docker的标识就可以看出来了, 把容器类比成码头集装箱,docker就是码头搬运管理系统
集装箱(容器)内部装好了程序、依赖、配置,运行环境, 自成一套完整运行环境,是一个特殊的隔离环境, 可以让进程只看到环境里的有限资讯, 不对外施加影响。我们来看下面这个例子, 宿主机系统为Ubuntu26.04,ps进程有4个,拉取Ubuntu22.04镜像并运行,ps进程只有2个
root@ubuntu01:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=26.04
DISTRIB_CODENAME=resolute
DISTRIB_DESCRIPTION="Ubuntu 26.04 LTS"
root@ubuntu01:~#
root@ubuntu01:~#
root@ubuntu01:~# ps
PID TTY TIME CMD
2387 pts/1 00:00:00 sudo
2388 pts/1 00:00:00 su
2390 pts/1 00:00:00 bash
29061 pts/1 00:00:00 ps
root@ubuntu01:~#root@ubuntu01:~# docker pull ubuntu:jammy
jammy: Pulling from library/ubuntu
d6834b4a794c: Pull complete
632e0587446e: Download complete
Digest: sha256:0e0a0fc6d18feda9db1590da249ac93e8d5abfea8f4c3c0c849ce512b5ef8982
Status: Downloaded newer image for ubuntu:jammy
docker.io/library/ubuntu:jammy
root@ubuntu01:~# docker run -it ubuntu:jammy bash
root@791732213fd9:/#
root@791732213fd9:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"
root@964136b6eaf5:/# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
9 pts/0 00:00:00 ps
root@964136b6eaf5:/#码头搬运管理系统(docker)是一套能制作、运输、调度、管理所有集装箱的完整码头工具, 如下: docker pull: 从仓库码头拉取标准集装箱图纸(镜像)docker run: 把图纸生成实体集装箱(启动容器)docker start/stop: 吊装、放下集装箱,启停运行docker rm: 废弃、移除集装箱docker images: 仓库里存放的集装箱模板docker compose: 成套集装箱组合运输方案(多容器打包)Docker Engine: 码头后台总调度,负责管控所有集装箱资源
第二部分:为什么要隔离
隔离主要有两个优点, 第一出于系统安全考量, 容器只可以在有限范围内自由活动,绝不允许越界,第二就是可以降本增效
第三部分:虚拟机和容器的区别
到这里可能有些人会觉得那容器和虚拟机差不多,那两者有什么区别的?我们画一张图大家就会比较清晰,虚拟机就像房车,每台车自带发动机(内核),水电系统,体积大,油耗高, 搬家很慢。容器就像集装箱, 全部放在同一辆货车(工业宿主机内核),箱子只装货物(应用), 轻便秒开
第四部分:容器是如何实现隔离
隔离技术主要依赖操作系统内核的三个技术: namespace,cgroup, chroot,我们把宿主机比作一栋大楼,namespace可以创建独立的文件系统,主机名,进程号等等, 相当于进程小房间,cgroup是来实现对资源优先级和配额限制,相当于小房间的水电表,chroot可以更改进程根目录,使其可以访问特定目录,相当于小房间的地砖,有了这三个,完整的隔离就出现了。
第五部分:容器技术的3个核心概念
容器技术中有3个比较重要的核心概念,分别是容器,镜像和镜像仓库,容器前面已经讲过,这里不再赘述,存放镜像模板的地方就是镜像仓库(阿里云/Docker Hub...), 镜像是容器的静态形式,相当于装修图纸/模板,在第一部分中,我们到镜像仓库下载一个ubuntu的镜像并运行,就是相当于到镜像仓库拿到一个图纸并成功盖好房子。
其他部分就不再啰嗦, 有兴趣大家可以自行至docker官网学习哦

评论区