Docker数据卷是Docker中的一个核心机制,用于实现容器间数据的持久化和共享。它是宿主机上的一个特殊目录,可以供一个或多个容器使用。容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。
容器数据卷的特性:
-
持久性:Docker数据卷是在宿主机上创建的目录或文件系统,它独立于容器的生命周期。这意味着即使容器停止或删除,数据卷中的数据仍然会被保留,从而实现了数据的持久化存储。
-
共享性:数据卷可以在不同的容器之间挂载和复用,使得多个容器能够访问到相同的数据源。这种特性在微服务架构下的多容器协作中尤为重要,因为不同的服务或组件可能需要共享某些数据。
-
高效性:数据卷直接映射到宿主机的文件系统上,因此相对于使用bind mounts(绑定挂载)或者通过容器内部文件系统读写数据,具有更好的I/O性能。
-
实时性:对数据卷的修改会立即生效,无论是在容器内部还是在本地目录中对数据卷进行修改,都能实时反映到其他地方。
1、容器数据卷的挂载
1.1 匿名目录挂载
1 创建容器的只给一个地址,会将容器里面的地址挂载在宿主机下/var/lib/docker/volumes
路径下生成
# 创建容器,匿名挂载
docker run -ti -d --name my_nginx -p 8000:80 -v /home/wuzhibin nginx
# 查看容器信息
docker inspect my_nginx
2 查看容器数据卷挂载,源件为容器中的数据件,目标卷为宿主机上的数据卷
3 在宿主机上新建一个文件
4 在宿主机的文件映射到容器中
1.2 指定目录挂载
1 指定目录挂载相当于容器中的目录挂载到宿主机的指定目录下
# 创建容器
docker run -ti -d --name my_nginx -p 8000:80 -v /home/wuzhibin:/home/wuzhibin nginx
# 查看容器信息
docker inspect my_nginx
2 查看宿主机的目录下的文件大小
3 查看容器中挂载卷的文件大小
两个卷的文件是一致的,不管哪个卷中的文件变化都会同步更新的
1.3 DockerFile 添加数据卷
一般我们构建镜像的都是通过DockerFile文件来构建镜像启动容器的,不会通过命令单独对容器进行数据卷的挂载的, 但是请注意Dockerfile 不能直接指定数据卷映射或挂载, 也就是说Dockfile的挂载只能是匿名挂载
# 数据卷挂载的Dockersfile命令
VOLUME ["/home/wuzhibin","/home/wuzhibin"]
完整的Dockerfile文件
# Dockerfile
#基准镜像
FROM nginx:latest
#作者信息
MAINTAINER "wuzhibin"
#工作目录
WORKDIR /usr/local/src/
#设置容器中要挂在到宿主机的目录
VOLUME ["/home/wuzhibin/nginx","/usr/local/nginx/html"]
CMD ["nginx", "-g","daemon off;"]
1 编译nginx镜像
# 新建的Dockerfile文件
vim Dokerfile
# 复制上面内容退出
# 编译docker镜像
docker build . -t my_nginx
2 查看编译的镜像
docker images
3 启动容器
docker run -ti -d --name my_nginx my_nginx
4 查看数据卷挂载情况
docker inspect my_nginx
2、数据卷容器
将一个容器的数据共享给一个挂载该容器的容器,就是数据卷容器。这个容器充当一个数据卷,其他挂载这个数据卷容器的容器之间数据共享。
1 运行数据卷容器
docker run --name=data_contain -v /home/wuzhibin:/home/wuzhibin -ti -d nginx
2、启动需要挂载数据卷的容器1和容器2
docker run -it -d --name=my_contain1 --volumes-from data_contain nginx
docker run -it -d --name=my_contain2 --volumes-from data_contain nginx
3、数据卷中添加数据,其他容器中会同步
docker exec -ti data_contain bash
cd /hmoe/wuzhibin
echo hello world > 1.txt
4 查看其他容器的数据
其他的容器中都存在数据卷容器的文件
上一章:docker 的网络管理-CSDN博客
下一章:DockerFile-CSDN博客