Docker容器数据卷如何实现持久化存储?

2026-05-28 02:171阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1245个文字,预计阅读时间需要5分钟。

Docker容器数据卷如何实现持久化存储?

什么是容器数据卷+从Docker的概念说起,Docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了。如果数据都存在容器中,那么删除容器,数据就会丢失!要求: 什么是容器数据卷?+ 从Docker的概念说起,Docker将应用和环境打包成一个镜像,运行镜像(生成容器)即可访问服务。如果数据都存在容器中,那么删除容器,数据就会丢失!需要:

什么是容器数据卷

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

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

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

Docker容器数据卷如何实现持久化存储?

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

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

数据的覆盖问题

  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
  • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
  • 这两个规则都非常重要,灵活利用第一个规则可以帮助我们​​初始化数据卷​​中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

    使用数据卷

    方式一:直接使用命令挂载 -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​​容器内路径,​​ro​​​​rw​​改变读写权限

    • 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​​: 说明这个路径只能通过宿主机来操作,容器内无法操作

    本文共计1245个文字,预计阅读时间需要5分钟。

    Docker容器数据卷如何实现持久化存储?

    什么是容器数据卷+从Docker的概念说起,Docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了。如果数据都存在容器中,那么删除容器,数据就会丢失!要求: 什么是容器数据卷?+ 从Docker的概念说起,Docker将应用和环境打包成一个镜像,运行镜像(生成容器)即可访问服务。如果数据都存在容器中,那么删除容器,数据就会丢失!需要:

    什么是容器数据卷

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

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

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

    Docker容器数据卷如何实现持久化存储?

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

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

    数据的覆盖问题

  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
  • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
  • 这两个规则都非常重要,灵活利用第一个规则可以帮助我们​​初始化数据卷​​中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

    使用数据卷

    方式一:直接使用命令挂载 -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​​容器内路径,​​ro​​​​rw​​改变读写权限

    • 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​​: 说明这个路径只能通过宿主机来操作,容器内无法操作