我对Docker的理解
1.Docker到底能解决什么问题?
以前:“我本地能跑,你机器跑不起来”,环境不一致就跑不了。
虚拟机:完整的操作系统,内核,驱动,文件系统全部复制一份,体积大,启动慢,占用内存CPU高。
Docker容器:不装完整的操作系统,直接用宿主机的Linux的内核。只打包你的程序,以及程序需要的库,配置文件等。
通俗来讲:虚拟机是新房子;Docker容器是房子的隔间,共用一套地基,也就是宿主机的内核。
2.四大核心概念
(1)镜像image(模板,只读)
镜像就是安装包/模板,只读,不能改。比如alpine,nginx镜像。
通俗来说,蛋糕模具,不能吃,只能用来生产蛋糕。
(2)容器container(跑起来的实例)
镜像运行起来就是容器。
基于同一个镜像,可以启动成千上万个容器。
容器拥有一层可读写层,所有修改全部写在这一层,镜像本身丝毫不动。
类比:用模具(镜像)烤出来的蛋糕(容器),蛋糕上面可以抹奶油(读写层),模具不变。
关键:容器删除,读写层全部销毁。容器内部的数据全部丢失。想要数据留下来就必须用数据卷volume。
(3)仓库registry
存放镜像的网上仓库,Docker Hub是公共仓库。
docker pull nginx:去仓库下载镜像到本地。
(4)数据卷volume
容器销毁数据就没了。把宿主机的目录挂载映射进容器,数据存储在宿主机磁盘,容器删了数据还保留。
两种挂载:
volume:docker管理的卷
bind mount:手动指定宿主机任意目录映射
3.容器和虚拟机核心区别
docker不是虚拟机,容器只是进程的集合,宿主机上看就是一堆进程。
4.两个底层内核技术
(1)NameSpace命名空间
做隔离:给容器里面的进程制造假象,容器内部看到独立的PID,独立网络,独立主机名,独立文件系统视图。
(容器里面看到PID=1的进程,在宿主机上实际是一个很大的PID)
(2)Cgroup控制组
做限制:限制这个容器最多能用多少CPU,内存,防止一个容器把整机资源用光。
(namespace:看不见外面;cgroup:不能用太多资源,两者结合实现容器隔离)
5.镜像分层
docker镜像不是一个完整大文件,是一层一层堆叠。
每执行Dockerfile一行指令,生成一层layer。
多层只读层叠加,最上面一层是容器读写层。
好处:多个镜像可以共享底层层,节省磁盘。
6.常用命令
docker pull nginx #下载镜像(拿模板)
docker images #查看本地有哪些镜像模板
docker run -d nginx #根据镜像启动容器(把模具烤成蛋糕,后台运行)
docker ps #看正在运行的容器
docker ps -a #看全部的容器,包括已经停止运行的
docker stop 容器id #停止容器,容器还在磁盘,数据读写层保留
docker start 容器id #再次启动停止的容器
docker rm 容器id #删除容器,读写层全部数据丢失
docker rmi 镜像id #删除镜像模板,没有容器使用才可以删
docker exec -it 容器id /bin/bash #进入正在运行的容器内部终端
docker volume create myvol #创建数据卷
7.Dockerfile(如何自己做镜像)
Dockerfile就是一份脚本,描述怎么构建镜像。每一行生成一层layer。
FROM alpine #基础镜像
RUN apk add nginx #执行命令安装软件
CMD ["nginx","-g","daemon off;"] #容器执行命令
构建:docker build -t mynginx:v1 .
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)