第七章 Docker容器数据卷

1、坑:容器卷记得加入

--privileged=true

why

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个–privileged=true参数即可

如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

2、回顾下上一讲的知识点,参数V

还记得蓝色框框中的内容吗?

在这里插入图片描述

docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry

-v 说明要添加自定义的容器卷

冒号 :左边的是宿主机的路径, 右边的是容器内的路径

--privileged=true 放开root权限

/zzyyuse/myregistry/:/tmp/registry 说明容器内部和宿主机的某个绝对路径的信息的共享和互通互联

默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调

在这里插入图片描述

3、是什么

一句话:有点类似我们Redis里面的rdb和aof文件

将docker容器内的数据保存进宿主机的磁盘中
在这里插入图片描述

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

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

4、能干嘛

*  将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的
 
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
 
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接实时生效,爽
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
 

5、数据卷案例

1、宿主vs容器之间映射添加容器卷

直接命令添加

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

[root@localhost ~]#   docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
root@4d488a083ee3:/# pwd
/
root@4d488a083ee3:/# cd /tmp/docker_data/
root@4d488a083ee3:/tmp/docker_data# ls
在u1容器据卷/tmp/docker_data目录下创建dockerin.txt
root@4d488a083ee3:/tmp/docker_data# touch dockerin.txt
root@4d488a083ee3:/tmp/docker_data# ls
dockerin.txt

在宿主机的/tmp/host_data目录下会同步dockerin.txt文件

[root@localhost ~]# cd /tmp/host_data
[root@localhost host_data]# ls
dockerin.txt

在宿主机创目录下创建文件hostin.txt

[root@localhost host_data]# touch hostin.txt
[root@localhost host_data]# ls
dockerin.txt  hostin.txt

会同步到容器卷的/tmp/docker_data目录下

root@4d488a083ee3:/tmp/docker_data# ls
dockerin.txt  hostin.tx

查看数据卷是否挂载成功

docker inspect 容器ID

例子
docker inspect 4d488a083ee3
挂载
"Mounts": [
            {	 类型:绑定
                "Type": "bind",
                源:宿主机的地址
                "Source": "/tmp/host_data",
                目的:docker里的地址
                "Destination": "/tmp/docker_data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

容器和宿主机之间数据共享

1  docker修改,主机同步获得 
2 主机修改,docker同步获得
3 docker容器stop,主机修改,docker容器重启看数据是否同步。
答案可以同步

2、读写规则映射添加说明

读写(默认)
rw = read + write

 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw      镜像名
 默认同上案例,默认就是rw

只读

容器实例内部被限制,只能读取不能写

 /容器目录:ro 镜像名               就能完成功能,此时容器自己只能读取不能写  
 
ro = read only
 
此时如果宿主机写入内容,可以同步给容器内,容器可以读取到。

也就是说只限制容器,没有限制主机
 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro      镜像名

容器内

运行容器卷 u2
[root@localhost host_data]# docker run -it --privileged=true -v /mydocker/u:/tmp/u:ro --name=u2 ubuntu

宿主机内

[root@localhost ~]# cd /mydocker/u
[root@localhost u]# pwd
/mydocker/u
[root@localhost u]# ll
总用量 0
[root@localhost u]# touch a.txt
[root@localhost u]# ls
a.txt
[root@localhost u]# vim a.txt
[root@localhost u]# 

容器内

root@0069caea27ed:/# cd /tmp/u
root@0069caea27ed:/tmp/u# pwd
/tmp/u
root@0069caea27ed:/tmp/u# ls
a.txt
root@0069caea27ed:/tmp/u# cat a.txt
1111 hole world ~1

root@0069caea27ed:/tmp/u# 
在容器内创建b.txt报错
root@0069caea27ed:/tmp/u# touch b.txt
touch: cannot touch 'b.txt': Read-only file system
root@0069caea27ed:/tmp/u# 

3、卷的继承和共享

容器1完成和宿主机的映射

docker run -it  --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu

容器2继承容器1的卷规则

docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu
例子
docker run -it  --privileged=true --volumes-from u1  --name u2 ubuntu

u1和u2是两个独立的容器

u2是继承的u1的挂载的规则,即使把u1关闭,宿主机的改变照样会同步到u2
即使我们将u1重新启动,宿主机上的内容也会同步到u1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是Docker?为什么要使用DockerDocker是一种容器化技术,可以将应用程序打包成容器,使其能够在任何环境中运行,而不需要担心环境差异问题。Docker可以提高应用程序的可移植性、可伸缩性和安全性。 2. Docker和虚拟机的区别是什么? 虚拟机是一种完整的操作系统虚拟化技术,而Docker是一种应用程序级别的虚拟化技术。虚拟机需要模拟整个操作系统,包括内核、系统服务等,而Docker只需要模拟应用程序的运行环境。因此,Docker比虚拟机更轻量级、更快速、更节省资源。 3. Docker的三个基本组件是什么? Docker的三个基本组件是Docker Engine、Docker Hub和Docker CLI。Docker Engine是Docker的核心组件,负责管理Docker容器和镜像。Docker Hub是Docker的公共镜像仓库,用户可以在其中分享和下载镜像。Docker CLI是Docker的命令行接口,用户可以使用Docker CLI来创建、管理和运行Docker容器。 4. Docker的镜像和容器是什么? Docker镜像是一个静态的文件,包含了应用程序运行所需的所有文件和依赖项。Docker容器是一个运行中的实例,它基于Docker镜像创建,包含了应用程序的运行环境和状态。 5. 如何创建Docker镜像? 创建Docker镜像的基本步骤是:创建一个Dockerfile文件,定义Docker镜像的构建过程;使用docker build命令构建Docker镜像;使用docker push将Docker镜像推送到Docker Hub镜像仓库中。 6. 如何创建Docker容器? 创建Docker容器的基本步骤是:使用docker run命令创建Docker容器,并指定所需的Docker镜像和容器的名称;使用docker start、docker stop、docker restart等命令管理Docker容器的生命周期。 7. 如何保证Docker容器的安全性? 保证Docker容器的安全性可以从以下几个方面入手:使用最小化的Docker镜像和应用程序;限制Docker容器的权限;监控Docker容器的运行状态;及时更新Docker镜像和应用程序等。 8. 如何扩展Docker容器? 扩展Docker容器可以从以下几个方面入手:使用Docker Swarm或Kubernetes等容器编排工具管理多个Docker容器;使用Docker Compose将多个Docker容器组合成一个应用程序;使用Docker网络使多个Docker容器之间进行通信。 9. 如何在Docker容器中运行多个服务? 在Docker容器中运行多个服务可以使用以下几种方式:使用Docker Compose将多个Docker容器组合成一个应用程序;使用Docker网络将多个Docker容器连接在一起;在Docker容器中运行多个进程,使用supervisord等工具管理进程。 10. 如何实现Docker容器的持久化存储? 实现Docker容器的持久化存储可以从以下几个方面入手:使用Docker数据数据存储在主机上;使用Docker网络将数据存储在其他Docker容器中;使用第三方存储系统,如NFS、GlusterFS等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值