K8S学习之前站三:docker的持久化

Docker数据持久化

在Docker中,容器的文件系统是临时的,如果容器被删除或重新创建,所有未保存的数据都会丢失。为了解决这个问题,可以使用以下两种方法来持久化数据:

Bind Mounts:将宿主机上的特定目录挂载到容器内

Volume:由Docker管理的特殊目录,用户存储数据

1)使用Bind Mounts实现数据持久化

Bind Mounts允许将宿主机文件系统中的目录或文件挂载到容器的某个目录。这种方式非常直接,适合在开发和测试环境中使用

将宿主机的html挂载到nginx容器的/usr/share/nginx/html目录

a) 创建一个html目录,在html下创建一个index.html文件,内容为docker 持久化

  1. more index.htmldocker Bind Mounts持久化
    

图片编辑

​ b) 运行容器并使用Bind Mounts

docker run -d -p 80 --name mynginx1 -v /root/soft/docker/nginx/html:/usr/share/nginx/html nginx:1.26docker ps -a

图片

编辑

图片

编辑

​ c) 测试容器端口

curl localhost:32773http://172.16.80.140:32773

图片

编辑

图片

编辑

浏览器显示乱码,可查看浏览器设置,将文本设置和后台字符集设置一致

图片

编辑

2)使用volume实现持久化

​ volume是Docker推荐的持久化的数据方式,因为它们独立于宿主机的文件系统,并有docker管理,适合生产环境使用

​ a) 创建一个volume

docker volume create myvolume

​ b) 运行容器并使用volume

docker run -d -p 80 --name mynginx2 -v myvolume:/usr/share/nginx/html nginx:1.26cat /var/lib/docker/volumes/myvolume/_data/index.html可直接修改index.html内容docker ps -a

图片

编辑

图片

编辑

图片

编辑

3)删掉容器会发现该目录还在,下次还可以直接用

docker stop c78247b5cdc6 && docker rm c78247b5cdc6ls -alrt docker volume inspect myvolume

图片

编辑

图片

编辑

图片

编辑

docker0 虚拟网桥

在安装docker的时候,系统会自动创建一个名为dacker0的虚拟网桥。它在docker网络体系中充当一个交换机的角色,将所有docker容器连接在一起,使它们能够通过docker0互相通信

使用ip addr命令可看到docker0的详细信息

图片

编辑

·docker0:虚拟网桥的名称。·<BROADCAST,MULTICAST,UP,LOWER_UP>:接口状态及属性。表示该接口支持广播、多播,并且当前处于活动状态。·mtu 1500:最大传输单元(MTU),表示最大传输数据包的大小为 1500 字节。·link/ether 02:42:30:e6:c8:ef:虚拟网桥的 MAC 地址。·inet 172.17.0.1/16:虚拟网桥的 IPv4 地址及子网掩码。·brd 172.17.255.255:广播地址。

a) 虚拟网桥的特点

虚拟网桥docker0可以配置IP地址,使其成为docker容器网络中的网关。默认情况下,docker0使用172.17.0.1/16的地址。

docker0相当于一个隐藏的虚拟网卡,通过它,所有Docker容器都可以实现网络互通。

b)veth设备对

每个docker容器生成一个veth设备对

每当运行一个docker容器时,系统会生成一对veth(虚拟以太网)设备。这对设备的一个接口在容器内部,另一个接口在宿主机上,并连接到docker0。

图片

编辑

c) 安装网桥管理工具

yum install bridge-utils -ybrctl show

图片

编辑

输出内容

·bridge name:网桥的名称。·bridge id:网桥的 ID。·STP enabled:表示是否启用了生成树协议(STP)。·interfaces:列出了所有连接到该网桥的接口。每个接口对应一个 Docker 容器的 veth 设备。

d)实践,运行多个docker容器

docker run -d --name container1 nginx:1.26docker run -d --name container2 nginx:1.26docker run -d --name container3 nginx:1.26brctl showip addr | grep veth

图片

编辑

图片

编辑

docker的网络模式

图片

编辑

docker run创建docker容器时,可以用--net选项指定容器的网络模式:bridge模式:使--net =bridge指定,默认设置;host模式:使--net =host指定;none模式:使--net =none指定;container模式:使用--net =container:NAME orID指定。

a) none模式

Docker网络none模式是指创建的容器没有网络地址,只有lo网卡

docker run -itd  --name none --net=none --privileged=true centosdocker exec -it none /bin/bash

图片

编辑

b) container模式

Docker 网络的 container 模式是指在创建新容器时,通过 --net container 参数,指定新容器与已经存在的某个容器共享同一个网络。如图所示,右侧黄色的新创建容器通过这个设置与左侧已经存在的容器共享网络空间。因此,新创建的容器不会拥有自己独立的 IP 地址,而是与左侧容器共享同一个 IP 地址(如 172.17.0.2)、端口范围等网络资源。两个容器的进程可以通过 lo 网卡设备进行通信。

这种共享网络的机制意味着新容器在网络层面上与指定的已有容器完全一致,两者可以互相访问彼此的服务和端口,就像它们在同一个本地网络中一样。

图片

编辑

#和已经存在的none容器共享网络

docker run --name con --net=container:none  -it --privileged=true centosip addr

图片

编辑

c) bridge桥接模式

bridge是docker默认的网络模式。每个容器都连接到一个名为 docker0 的虚拟桥接网络,通过 NAT(网络地址转换)与宿主机的网络通信。

#创建桥接网络

docker run --name bridge -it  --privileged=true centos  baship addr

link/ether 02:42:ac:11:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0

图片

编辑

d) host模式

· 容器与宿主机共享网络命名空间。

· 容器将不会有自己的 IP 地址,而是使用宿主机的 IP 地址。

· 对于需要高性能网络通信且无需网络隔离的应用,这种模式非常有用。

#共享宿主机网络

docker run --name host -it --net=host --privileged=true centos  baship addr

图片

编辑

posted @ 2025-03-28 21:53  云上艺旅  阅读(36)  评论(0)    收藏  举报