docker通用技术介绍

server/2025/3/1 21:53:14/

docker_0">docker通用技术介绍

docker_2">1.docker介绍

1.1 基本概念

docker是一个开源的容器化平台,用于快速构建、打包、部署和运行应用程序。它通过容器化技术将应用及其依赖环境(如代码、库、系统工具等)打包成一个标准化、轻量级的独立单元,实现跨环境的一致性运行。

docker容器容器是一种轻量级虚拟化技术,docker是创建和管理容器的工具。

docker_10">1.2 docker的优势

1.环境一致性:开发、测试、生产环境使用相同镜像,避免“在我机器上能跑”的问题。

2.快速部署:秒级启动,支持自动化扩缩容(结合K8S)。

3.资源高效:无需模拟完整操作系统,节省计算资源。

4.隔离性:应用运行在独立沙箱,避免依赖冲突。

docker_20">1.3 docker与虚拟机对比

docker虚拟机
虚拟化层级操作系统级(共享主机内核)硬件级(通过Hypervisor辅助)
启动速度秒级分钟级
资源占用低(MB级内存)高(GB级内存)
隔离性进程级隔离(通过namespace和cgroups)硬件级隔离(完全独立的操作系统)
安全性共享内核,存在潜在攻击面完全隔离,虚拟机漏洞不影响宿主机
镜像大小镜像分层复用,MB级包含完整OS,GB级
应用场景云原生和微服务、快速部署强隔离需求(如安全敏感应用)

2.安装配置

yum install docker-ce
systemctl  enable docker;systemctl  start docker#配置docker源
echo "x.x.x.x socp.io" >>/etc/hostscat >>/etc/docker/daemon.json<<EOF
{"live-restore": true,"insecure-registries":["socp.io"],			#镜像仓库#"graph": "/mnt/data01/docker",				#存储路径"log-driver": "json-file",					#默认日志驱动"log-opts": {"max-size": "150m","max-file": "10"}
}
EOFsystemctl restart docker

3.镜像管理

docker镜像是一个分层存储的文件系统,每一层都是只读的,并且可以被多个镜像共享。

docker images
docker pull <image>
docker pull socp.io/grafana/grafana:8.3.11
docker push <image>
docker rmi <image>

1.overlay(或overlay2)是docker默认的联合文件系统(unionFS)驱动,用于管理容器和镜像的分层存储。

它通过将多个只读层(镜像层)和一个可写层(容器层)合并,为容器提供统一的文件系统视图。当启动容器时,docker会基于镜像的只读层创建一个可写层(overlay挂载点),容器内的所有文件修改都发生在这一层。

作用:分层存储、写时复制(copy-on-write)

2.shm(共享内存)

shm是linux的共享内存(shared memory)文件系统(类型为tmpfs),基于内存的临时存储。docker默认挂载一个64MB的/dev/shm共享内存分区,用于进程间通信或某些依赖共享内存的应用。

4.容器管理

docker run -d \
-p 3000:3000 \
--restart=unless-stopped \
socp.io/grafana/grafana:8.3.11docker stop <id>
docker exec -it <id> <cmd>
docker rm <id>

docker_92">5.docker网络

docker提供了多种网络驱动模式,支持灵活的网络配置,满足不同场景的需求。每个容器拥有独立的网络命名空间,隔离网络栈(IP、端口、路由表等)。

实际应用中需结合安全策略(如网络隔离、最小权限)和性能需求(如驱动选择)进行配置。

docker network ls
docker network inspect <id>

5.1 bridge网络(默认)

默认创建一个名为docker0的虚拟网桥,容器通过veth对连接到网桥。容器分配私有IP(172.17.0.0/16),宿主机通过NAT与外部通信。

适用于单机环境下容器间通信,或需要对外暴露服务的应用(如web服务器)。

5.2 host网络

容器直接共享宿主机的网络命名空间,使用宿主机IP和端口。无NAT或虚拟网桥,性能接近原生。

适用于需要极致网络性能的应用。

5.3 overlay网络

用于跨主机的容器通信。基于vxlan等隧道技术,封装容器流量并通过物理网络传输。

常用于微服务集群、K8S等容器编排平台。

5.4 none网络

容器不配置任何网络接口,仅保留lo回环地址。

完全隔离,适用于极端安全场景或自定义网络配置。

docker_127">6.docker数据管理

数据卷(volume)是实现持久化存储的主要方式,它允许容器与宿主机之间共享数据,并确保数据在容器删除后依然保留。默认存储在/var/lib/docker/volumes/

docker volume create <name>			#创建数据卷
docker volume ls					#列出数据卷
docker volume inspect <name>		#查看数据卷信息
docker volume rm <name>				#删除数据卷docker volume create grafana-data
docker run -d \
-p 3001:3000 \
--restart=unless-stopped \
-v grafana-data:/var/lib/grafana/ \
socp.io/grafana/grafana:8.3.11

除了数据卷,还可以直接将宿主机的目录挂载到容器(绑定挂载),路径由用户指定

mkdir -p /test/grafana/data
chmod -R 777 /test/grafana/data-v /test/grafana/data:/var/lib/grafana/

7.日志与监控

docker logs <id> -f --tail 50	#查看日志
docker stats 			#实时资源监控
docker top <id> 		#查看进程树
docker inspect <id>		#查看容器信息docker cp container:/path/in/container /path/on/host			#在容器和宿主机之间复制文件docker日志路径:/var/lib/docker/containers/
内部文件路径:/var/lib/docker/overlay2/
启动命令:Entrypointdocker system df -v		#查看docker磁盘使用情况
docker system prune		#清理未使用的资源
docker system info 		#查看docker系统信息
docker system events	#监控事件日志

常见问题

1.区分容器进程or宿主机进程

#检查父进程链
pstree -aps <pid>#docker进程会在cgroup中标记容器ID或docker相关路径:
cat /proc/<pid>/cgroup

培训题目

1.如何查看docker配置文件?

2.如何查看docker容器最新日志?

3.如何查看某docker容器占用资源大小?

4.给出一个进程号,如何判断该进程是否为容器内部进程?

5.如何清理未使用的docker资源?

6.请安装docker,并配置镜像仓库地址为socp.io,容器日志驱动为json-file,轮转日志文件单个最大10MB,保留5个副本。

7.启动一个名为grafana的容器,要求:后台运行,映射宿主机3000端口到容器3000端口;挂载宿主机目录/test/grafana/data到容器/var/lib/grafana/持久化存储;设置容器为自启。容器正常启动后,导出日志到/root目录下。


http://www.ppmy.cn/server/171642.html

相关文章

使用vscode导出Markdown的PDF无法显示数学公式的问题

我的硬件环境是M2的MacBook air&#xff0c;在vscode中使用了Markdown PDF来导出md文件对应的PDF。但不管导出html还是PDF文件&#xff0c;数学公式都是显示的源代码。 我看了许多教程&#xff0c;给的是这个方法&#xff1a;在md文件对应的html文件中加上以下代码&#xff1a…

非关系型数据库和关系型数据库的区别

非关系型数据库&#xff08;NoSQL&#xff09;和关系型数据库&#xff08;SQL&#xff09;的主要区别体现在以下几个方面&#xff1a; 数据模型&#xff1a; 关系型数据库&#xff08;SQL&#xff09;&#xff1a;数据以表格形式存储&#xff0c;数据行和列组成&#xff0c;每个…

多线程3:MFC中用户界面线程的相关操作

文章目录 前言一、工作线程与界面线程的区别1.在子线程中创建模态对话框2.在子线程中创建非模态对话框二、界面线程1.界面线程的创建总结前言 多线程3:MFC中用户界面线程的相关操作。 一、工作线程与界面线程的区别 工作线程与界面线程主要是针对MFC中的线程来说的。默认情况…

ClkLog里程碑:荣获2024上海开源技术应用创新竞赛三等奖

2024年10月&#xff0c;ClkLog团队参加了由上海计算机软件技术开发中心、上海开源信息技术协会联合承办的2024上海数智融合“智慧工匠”选树、“领军先锋”评选活动——开源技术应用创新竞赛。我们不仅成功晋级决赛&#xff0c;还荣获了三等奖&#xff01;这一成就不仅是对ClkL…

HTTP/1.0、HTTP/1.1、HTTP/2 核心区别对比

前言 经常开发的小伙伴估计对http都不陌生&#xff0c;下面来看看的之间的区别是啥&#xff1f; 一、连接管理 ‌HTTP/1.0‌ 每个请求需单独建立和关闭 TCP 连接&#xff0c;无法复用&#xff0c;导致高延迟和资源浪费‌。 无状态设计&#xff0c;服务器不记录客户端上下文…

单链表删除算法(p=L; j=0;与p=p->next;j=1的辨析)

算法描述 Status ListDelete&#xff08;LinkList &L,int i&#xff09; { //在带头结点的单链表 L 中&#xff0c;删除第 i 个元素 pL; j0; while ((p->next) && (j<i-1)) {pp->next; j;} if (!(p->next)||(j>i-1)) return ERROR; qp->nex…

(十 三)趣学设计模式 之 模版方法模式!

目录 一、 啥是模板方法模式&#xff1f;二、 为什么要用模板方法模式&#xff1f;三、 模板方法模式的实现方式四、 模板方法模式的优缺点五、 模板方法模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&a…

vue写一个登录页面

目录 一、安装ui库二、路由跳转三、页面 一、安装ui库 element plus库 Element Plus 是 Element UI 的升级版本&#xff0c;专为 Vue 3.x 设计。它继承了 Element UI 的优秀特性&#xff0c;同时针对 Vue 3 的新特性&#xff08;如 Composition API、Teleport 等&#xff09;进…