网站建设方案书 文库,网站建设功能说明书,苏州短视频运营,公司网站怎么做美观华子目录 数据卷注意数据卷操作查看镜像#xff0c;容器#xff0c;数据卷所占空间 Docker的网络模式查看指定容器的网络模式bridge模式none模式host模式container模式 数据卷
数据卷是一个可供一个或多个容器使用的特殊目录#xff0c;它绕过UFS#xff0c;可以提供很多有… 华子目录 数据卷注意数据卷操作查看镜像容器数据卷所占空间 Docker的网络模式查看指定容器的网络模式bridge模式none模式host模式container模式 数据卷
数据卷是一个可供一个或多个容器使用的特殊目录它绕过UFS可以提供很多有用的特定
数据卷可以在容器之间共享和重用对数据卷的修改会立马生效数据卷的更新不会影响镜像数据卷默认会一直存在即使容器被删除用容器操作数据卷用数据卷操作容器都是会产生相同的效果
注意
数据卷的使用类似于Linux下对目录或文件进行mount镜像中的被指定为挂载点的目录中的文件会隐藏掉能显示看到的挂载的数据卷。
数据卷操作
Docker volume数据卷是Docker中用于在容器和主机之间共享和持久化数据的机制。它使得容器之间的数据共享和容器的数据持久化成为可能。
Docker volume的主要特点包括
数据持久性即使容器被删除Volume中的数据也不会丢失因为它们存储在宿主机上。数据共享多个容器可以共享同一个Volume使得数据共享变得简单方便。类型多样Docker支持多种类型的Volume包括本地Volume、远程Volume以及插件支持的Volume等。
以下是一个Docker volume的示例演示如何创建、使用和管理Volume
示例
创建Docker Volume
使用docker volume create命令可以创建一个新的Volume
docker volume create my-volume这条命令会创建一个名为my-volume的新Volume。
查看Docker Volume
使用docker volume ls命令可以查看当前系统中存在的所有Docker Volume
docker volume ls输出中会列出所有Volume的详细信息包括它们的名称和驱动程序。
将Volume挂载到容器
当创建容器时可以使用-v或--volume参数将Volume挂载到容器中的指定路径。例如
docker run -d -v my-volume:/data my-image这条命令会启动一个容器并将my-volume挂载到容器内的/data目录。容器内的/data目录现在将共享my-volume中的数据。
查看Volume的挂载位置
有时你可能想要知道Volume在宿主机上的具体挂载位置。可以通过docker volume inspect命令获取
docker volume inspect my-volume输出中会包含Volume的详细信息包括其挂载点Mountpoint这就是Volume在宿主机上的实际位置。
删除Docker Volume
当不再需要某个Volume时可以使用docker volume rm命令删除它
docker volume rm my-volume这条命令会删除my-volume以及其中的所有数据。请注意如果Volume正被容器使用则无法直接删除需要先停止并移除相关的容器。
[rootserver ~]# docker volume create my-volume #在Linux主机中创建一个名为my-volume的数据卷
my-volume
[rootserver ~]# docker volume ls #查看主机中的数据卷
DRIVER VOLUME NAME
local 2656990227a34c0f5e8022aa8a05a7be0c91554a28b2d71e8f4a51d73a5e36f4
local my-volume[rootserver ~]# docker volume inspect my-volume #查看my-volume数据卷的信息
[{CreatedAt: 2024-03-25T11:32:0508:00,Driver: local,Labels: null,Mountpoint: /var/lib/docker/volumes/my-volume/_data,Name: my-volume,Options: null,Scope: local}
][rootserver _data]# docker run -d -P --name web1 -v my-volume:/data nginx:latest
34ceb2d4ea950e140ef7786863ac9fe0a79c295d4a183cb4628db4c62ff699b5
[rootserver _data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34ceb2d4ea95 nginx:latest /docker-entrypoint.… 21 seconds ago Up 20 seconds 0.0.0.0:32769-80/tcp, :::32769-80/tcp web1[rootserver _data]# docker exec -it web1 bash #进入容器中
root34ceb2d4ea95:/# ls / #发现出现了/data目录
bin dev etc lib64 opt run sys var
boot docker-entrypoint.d home media proc sbin tmp
data docker-entrypoint.sh lib mnt root srv usr
root34ceb2d4ea95:/# cd /data
root34ceb2d4ea95:/data# ls
root34ceb2d4ea95:/data# touch file.txt #创建一个file.txt文件
root34ceb2d4ea95:/data# ls
file.txt
root34ceb2d4ea95:/data# cd
root34ceb2d4ea95:~# exit #退出容器
exit
[rootserver _data]# cd /var/lib/docker/volumes/my-volume/_data/ #切换到数据卷中
[rootserver _data]# ls #发现了我们在容器中创建的file.txt
file.txt
[rootserver _data]#[rootserver _data]# docker inspect web1 #显示结果如下图[rootserver _data]# docker volume --helpUsage: docker volume COMMANDManage volumesCommands:create Create a volumeinspect Display detailed information on one or more volumesls List volumesprune Remove unused local volumesrm Remove one or more volumes[rootserver _data]# docker volume rm my-volume #数据卷正在使用所以不能删除数据卷需要关闭或删除容器后再删除数据卷
Error response from daemon: remove my-volume: volume is in use - [34ceb2d4ea950e140ef7786863ac9fe0a79c295d4a183cb4628db4c62ff699b5]数据卷是被设计用来持久化数据的它的生命周期独立于容器 Docker不会在容器被删除后自动删除数据卷 并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。无主的数据卷可能会占据很多空间要清理请使用以下命令
[rootserver _data]# docker volume prune查看镜像容器数据卷所占空间
[rootserver _data]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 1 891.8MB 705.1MB (79%)
Containers 1 1 1.095kB 0B (0%)
Local Volumes 2 1 0B 0B
Build Cache 0 0 0B 0BDocker的网络模式
当你安装docker时它会自动创建三个网络
[rootserver ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
69cf9fe45652 bridge bridge local
211a8fdf9c39 host host local
fa566b41018a none null localbridge此模式会为每一个容器分配设置IP地址等使用--net或--networkbridge指定默认网络模式host容器将不会虚拟出自己的网卡不会配置自己的IP地址等而是使用宿主机的IP和端口使用--net或--networkhost指定none该模式关闭了容器的网络功能使用--net或--networknone指定container创建的容器不会创建自己的网卡不会配置自己的IP地址而是和一个指定的容器共享IP端口使用--net或--networkcontainer:指定容器名指定
查看指定容器的网络模式
[rootserver ~]# docker inspect linux-ubuntu | grep -i networkNetworkMode: bridge,NetworkSettings: {Networks: {NetworkID: 69cf9fe45652f27db873a0f1dbcc7f36b7357af33884f51356c4c38f41ca5181,bridge模式 Docker的Bridge网络模式是Docker的默认网络模式。当不指定网络类型时所创建的容器默认会采用这种网络模式。Bridge网络模式为每一个容器分配一个Network Namespace、IP等并将容器的网络连接到一个网桥默认为docker0上。 在Bridge网络模式下同一个宿主机上所有容器默认会在同一个网段默认网段为172.17.0.0/16下并且相互之间可以通信以及访问外部网络前提是宿主机可以访问外部网络。这种网络模式提供了容器之间的自动DNS解析使得容器化应用程序可以轻松地相互通信同时提高了安全性。 Bridge网络模式是基于Linux bridge的虚拟网络实现。Docker引擎在创建一个Bridge网络时会创建一个新的虚拟网桥命名为docker0然后将主机上的所有Docker容器的虚拟网卡接口连接到这个虚拟网桥上。每个容器的虚拟网卡接口都包含一个MAC地址和一个唯一的IP地址这些信息用于标识和路由容器之间的数据包。 此外Docker的Bridge网络驱动会自动在宿主机上安装好防火墙规则隔离开不同网桥之间的直接通信以确保安全性。Bridge网络适用于同一个Docker daemon宿主机下的容器。对于不同主机之间的通信可以在操作系统层面设置路由规则或者使用overlay网络等其他网络模式。 主机可以和容器通信容器之间也可以相互通信 安装docker时会自动创建一个docker0网桥运行容器时你可以使用选项指定容器应连接到哪个 网络否则Docker守护程序默认将容器连接到docker0虚拟网桥通过docker0网桥以及Iptables nat表配置与宿主机通信。 Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给docker0 接口。 此后启动的容器内的网口也会自动分配一个同一网段的地址。docker0的IP地址则为容器的默认网关。在主机上创建一对虚拟网卡vethpair设备Docker将veth pair设备的端放在新创建的容器中并命名为eth0(容器的网卡)另一端放在主机中以vethxxx这样类似的名字命名并将这个网络设备加入到docker0网桥中(bridge模式示意图如下图所示)
[rootserver ~]# docker run -d -it --name linux-ubuntu --netbridge ubuntu
[rootserver ~]# docker inspect linux-ubuntu | grep -i networkNetworkMode: bridge,NetworkSettings: {Networks: {NetworkID: 69cf9fe45652f27db873a0f1dbcc7f36b7357af33884f51356c4c38f41ca5181,none模式
使用none模式Docker容器拥有自己的Network Namespace但是并不为Docker容器进行任何网络配置。也就是说这个Docker容器没有网卡、业、路由等信息只有lo网络接口。需要我们自己为Docker容器添加网卡、配置IP地址等。不参与网络通信运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的场景中例如:备份、进程诊断及各种离线任务等。None模式示意图如下所示:
[rootserver ~]# docker run -d --name linux-ubuntu --networknone ubuntu
c2d71a8545314dbf2ef8d936e8c69dc34c02296ecf6c5585d40258ade4e47a80
[rootserver ~]# docker inspect linux-ubuntu | grep -i networkNetworkMode: none,NetworkSettings: {Networks: {NetworkID: fa566b41018a2edff899c8bf0b3f275a6726582276241e912d96fc48b626693a,
[rootserver ~]#host模式
如果启动容器的时候使用host模式那么这个容器将不会获得一个独立的Network Namespace而是和宿主机共用一个NetworkNamespace。容器将不会虚拟出自己的网卡配置自己的IP等而是使用宿主机的IP和端口。但是容器的其他方面如文件系统、进程列表等还是和宿主机隔离的。Host模式示意图如下所示:
[rootserver ~]# docker run -it --name linux-ubuntu -d --nethost ubuntu
64bf40afc85615e1af24de8e5062a044e9dd8f4e9149d9b06e2015d6e2aab098
[rootserver ~]# docker inspect linux-ubuntu | grep -i networkNetworkMode: host,NetworkSettings: {Networks: {NetworkID: 211a8fdf9c39a6ebbbd74c3b88e3e682a645f2d553bb21f8d2f6005fd84582a1,
[rootserver ~]#container模式
Container模式的示例可以如下进行
首先我们创建一个新的容器并默认使用Bridge模式这也是Docker的默认网络模式。我们将使用busybox镜像来创建一个名为bb的容器
docker run -itd --name bb busybox接下来我们要创建另一个容器这次我们将使用Nginx镜像并通过--net container:bb参数指定它的网络模式为Container模式让它和之前创建的bb容器共享相同的网络命名空间
docker run -d --name nginx-container --netcontainer:bb nginx这条命令会启动一个新的Nginx容器并将其网络配置设置为与bb容器相同。现在nginx-container和bb容器将共享相同的IP地址和端口范围它们之间的进程可以通过lo网卡设备进行通信。
[rootserver ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
630a7fa66f4c nginx:latest /docker-entrypoint.… 53 minutes ago Up 53 minutes 0.0.0.0:32770-80/tcp, :::32770-80/tcp web1
[rootserver ~]# docker run -d --name linux-ubuntu --networkcontainer:web1 ubu
ntu
2738e0fec3c329d77b53d08ef04b79650d08dc09cd58db735ccceb9bc2b47379
[rootserver ~]# docker inspect linux-ubuntu | grep -i networkNetworkMode: container:630a7fa66f4cffb7c17887295af442d8c3fd45e3c5fe9b5497f127474d2cf594,NetworkSettings: {Networks: {}
[rootserver ~]#