Docker | 容器数据卷详解

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker | 容器数据卷详解

什么是容器数据卷

从docker的理念说起,docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了。

  • 如果数据都存在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化
  • MySQL容器删了,就相当于删库了。需求:MySQL数据可以本地存储

容器之间可以有一个数据共享的技术,docker容器产生的数据同步到本地或者别的地方。

这就是数据卷技术,就是目录挂载,将容器内的目录,挂载到虚拟机上或者Linux上

目的:实现容器数据的持久化和同步操作。容器间也可以数据共享

数据的覆盖问题

  1. 如果挂载一个

空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。

  1. 如果挂载一个

非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。

这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

使用数据卷

方式一:直接使用命令挂载 -v

docker run -it -v 主机目录:容器内目录 docker run -it -v /home/test:/home centos /bin/bash

docker inspect 命令查看容器信息

测试挂载卷

1、在容器内部修改文件同步到Linux主机上

进入容器,在/home目录下创建123.sh文件

主机内可以查看在容器内部创建的文件

2、同样地,在Linux上修改挂在卷文件可以同步到容器内部

3、停止容器,修改Linux主机上的文件,同步到容器内

# 1、停止容器 exit # 2、查看容器是否还在运行 docker ps # 3、在Linux主机上修改对应目录的文件 # 4、启动容器并查看      # 4.1、 查看历史运行的容器   docker ps -a      # 4.2、 启动容器   docker start CONTAINER ID      # 4.3、 进去容器   docker attach CONTAINER ID      # 4.4、 查看数据卷文件

方式二:Dockerfile文件

请查看下一章节

数据卷命令

docker volume docker volume --help Usage:  docker volume COMMAND Manage volumes Commands:   create      Create a volume   inspect     Display detailed information on one or more volumes   ls          List volumes   prune       Remove all unused local volumes   rm          Remove one or more volumes Run 'docker volume COMMAND --help' for more information on a command.

具名挂载/匿名挂载

匿名挂载

-v 容器内路径 -P 自动分配端口号 docker run -d -P --name nginx02 -v /etc/nginx nginx

具名挂载

-v 卷名:容器内路径 docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx

查看数据卷

方式一:docker inspect 容器ID

方式二:docker volume inspect juming-nginx

查看Linux主机docker工作目录 /var/lib/docker所有docker容器内的卷,没有指定目录的情况下都是存放在 /var/lib/docker/volumes/xxx/_data 目录下

挂载三种方式

# 1 -v 容器内路径            # 匿名挂载 # 2 -v 卷名:容器内路径       # 具名挂载 # 3 -v 宿主机路径:容器内路径 # 指定路径挂载

扩展

给挂载的数据卷增加读写权限控制

通过 -v 容器内路径, rorw 改变读写权限

  • ro readonly 只读
  • rw readwrite 可读写

# 一旦设置了容器权限,容器对我们挂载出来的内容就有限定了 docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx

ro : 说明这个路径只能通过宿主机来操作,容器内无法操作

相关文章
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
324 6
|
1月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
157 6
|
网络协议 Java Maven
docker将数据从宿主机挂载到容器的方式(二)
docker将数据从宿主机挂载到容器的方式(二)
602 0
docker将数据从宿主机挂载到容器的方式(二)
|
存储 Docker 容器
docker将数据从宿主机挂载到容器的方式(一)
docker将数据从宿主机挂载到容器的方式(一)
508 0
docker将数据从宿主机挂载到容器的方式(一)
|
2月前
|
缓存 前端开发 Docker
Docker Layer Caching:加速你的容器构建
Docker Layer Caching:加速你的容器构建