从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • 计算机历史

  • 数字电路

  • 计算机组成原理

  • 汇编语言

  • C语言

  • 数据结构

  • 操作系统

  • Linux

    • 文本处理三剑客

    • 尚硅谷Docker实战教程

      • 教程简介
      • Docker简介
      • Docker安装
      • Docker常用命令
      • 镜像的分层概念
      • 发布镜像
      • Docker私有库
      • 容器数据卷
        • privileged参数
        • 容器卷
        • 实践
        • 读写规则映射
        • 容器卷之间的继承和共享
      • Docker常用软件安装
      • MySQL主从复制
      • 分布式存储之哈希取余算法
      • 3主3从Redis集群搭建与扩缩容
      • Dockerfile
      • 虚悬镜像
      • Docker微服务实战
      • Docker网络
      • Docker-compose容器编排
      • Portainer
      • Docker重量级监控
      • 完结
      • Docker
    • Linux安全

    • Linux文章集合
  • 计算机网络

  • Git

  • 数据库

  • 计算机小知识

  • 编译原理

  • 名人堂

  • 计算机基础
  • Linux
  • 尚硅谷Docker实战教程
2023-09-18
目录

容器数据卷

# 70.容器数据卷

上一篇启动registry的时候,用了-v和--privileged参数,本文就讲解这两个参数的含义   ‍

# privileged参数

在CentOS7中,安全模块会比之前系统版本加强,不安全的行为会先禁止,而目录挂载的情况被默认为不安全的行为,因此我们在启动私服的时候,可能会被禁止,报错cannot open directory .: Permission denied​

在SELinux里挂载目录是的被禁止的,如果要开启,一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。

‍

# 容器卷

Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。

之前用的-v参数,就是配置容器卷的(volume,简写为v)。

卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因为Docker不会在容器删除时删除其挂载的数据卷

一句话:有点类似Redis里面的rdb和aof文件,将容器内的数据保存进宿主机的磁盘中。

卷的特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接实时生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

‍

# 实践

运行一个带有容器卷存储功能的容器实例:

$ docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
1

默认情况,仓库被创建在容器的/var/lib/registry​,建议自行用容器卷映射。

‍

‍

例如启动一个Ubuntu,并创建一个txt文件:

$ docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
$ cd /tmp/docker_data/
$ touch dockerin.txt
1
2
3

如果目录不存在,Docker会自动创建

‍

‍

‍

然后回到宿主机,可以看到也有文件:

$ ls /tmp/host_data/
dockerin.txt
1
2

即使容器stop了,宿主机修改文件,容器重启后也会同步数据。

‍

‍

除此之外,也可以用inspect命令,查看挂载是否成功:

$ docker ps
CONTAINER ID   IMAGE      COMMAND   CREATED       STATUS          PORTS     NAMES
9bd7aa9d30cd   ubuntu     "bash"    3 minutes ago  Up 3 minutes              u1

$ docker inspect 9bd7aa9d30cd
.............
"Mounts": [
            {
                "Type": "bind",
                "Source": "/tmp/host_data",
                "Destination": "/tmp/docker_data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
.................
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

‍

随着后续深入的学习,-v可以配置多个目录共享,例如一个是数据目录,一个是日志目录,一个是配置文件目录等。

‍

‍

‍

# 读写规则映射

使用了-v参数后,默认数据是共享的,也就是支持读写(read 和 write,简写为rw),完整的命令是这样,在容器内目录后面有个rw:

$ docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw    镜像名
1

‍

‍

而有时候需要配置只读或者只写,也是可以的。例如设置容器只能读取:

$ docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro   镜像名
1

这里设置了ro,也就是read only,只能读不能写

‍

# 容器卷之间的继承和共享

有时候可能会有多个容器都使用一个宿主机的目录,此时就可以用继承的方式来完成共享。

在实践之前,可以先删掉所有的容器,方便观察。新建一个Ubuntu:

$ docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
$ cd /tmp
$ touch u1_data.txt
1
2
3

‍

‍

此时我们想要建立一个和u1,同样读写规则的ubuntu,就可以用继承了。命令格式:

docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu
1

‍

该容器和u1是共享目录的:

$ docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
$ cd /tmp
$ ls
u1_data.txt
1
2
3
4

‍

两个容器可以通过该目录来共享数据

‍

(完)

‍

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2023/9/18 12:28:56
Docker私有库
Docker常用软件安装

← Docker私有库 Docker常用软件安装→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式