【微服务实战之Docker容器】第四章-【微服务实战之Docker容器】第三章-镜像仓库

系列文章目录

【微服务实战之Docker容器】第一章-下载及安装


文章目录


坑:容器卷记得加入以下命令配置

shell 复制代码
--privileged=true

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied解决办法:

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

是个啥?

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

将docker容器内的数据保存进宿主机的磁盘中

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

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

参照上章的运行私服容器:

shell 复制代码
 docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry

主要目的是为了防止重要资料丢失,资料存储在宿主机上

能干啥?

将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的 Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。

为了能保存数据在docker中我们使用卷。

特点:

1:数据卷可在容器之间共享或重用数据

2:卷中的更改可以直接实时生效,爽

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

基本的命令

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

查看是否挂载成功,使用以下命令查看容器所有的配置,然后找到Mounts

shell 复制代码
 docker inspect 容器ID  

这种方式实现的数据卷绑定,容器(注意不是镜像)与宿主机会持久绑定,当容器重启时这种绑定关系依然存在,感兴趣的小伙伴可以自己尝试一下。

先启动linux容器绑定卷--》在容器内对应目录下创建文件--》在容器外对应目录下创建文件--》分别在容器内外查看对应目录--》把容器停止--》在容器外创建文件--》把容器通过id重新启动--》查看容器内文件

O(∩_∩)O,依然一致

读写规则映射添加说明

有时需要只允许容器读取,不允许容器写入

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

ro = read only(只读)

docker默认的是rw,可读可写

卷的继承和共享

--volumes-from 父类

shell 复制代码
docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu

这条命令可以实现容器间的卷继承,这种方式可以实现容器间的文件共享,我们测试一下

shell 复制代码
docker run -it --privileged=true -v /dockerdir:/tmp/testdocker --name u1  ubuntu

启动一个名为u1的ubuntu容器,绑定上卷,进入到u1容器的/tmp/testdocker目录下,创建一个名为u1.txt的文件

shell 复制代码
touch u1.txt

进入主机的/dockerdir/下,发现已有文件。

然后再使用命令,启动一个u2,继承u1的卷

shell 复制代码
docker run -it  --privileged=true --volumes-from u1  --name u2 ubuntu

然后进入到u2的/tmp/testdocker目录下,发现也有对应文件

然后使用u2创建一个u2.txt

\shell 复制代码
touch u2.txt

到u1下发现也已经有了,这就实现了文件的共享

接着我们把u1和u2都停掉,重启u2

shell 复制代码
docker stop u1
docker stop u2
docker start u2

接着进入u2的命令行界面

shell 复制代码
docker exec -it u2 /bin/bash

发现文件依然存在

这说明了docker的卷继承是永久性的,不会随着容器的重启而消失。

大家可以自己测试一下容器的删除是否会对此有影响。

shell 复制代码
docker rm u1

(多敲,命令才会熟练)

今天就到这里啦😊

相关推荐
Coder_Boy_2 分钟前
基于SpringAI的在线考试系统-0到1全流程研发:DDD、TDD与CICD协同实践
java·人工智能·spring boot·架构·ddd·tdd
糠帅傅蓝烧牛肉面2 小时前
单实例多MCP聚合服务:两种实现方案深度对比
前端·docker·ai
澄澈青空~4 小时前
畜牧业养牛技术与商家微服务解决方案
微服务·云原生·架构
linweidong4 小时前
C++大型系统中如何组织头文件和依赖树?
java·c++·架构
杨浦老苏5 小时前
离线优先的自托管笔记应用Anchor
笔记·docker·群晖
代码游侠5 小时前
嵌入式开发——ARM Cortex-A7内核和i.MX6处理器相关的底层头文件
arm开发·笔记·嵌入式硬件·学习·架构
a努力。5 小时前
虾皮Java面试被问:分布式Top K问题的解决方案
java·后端·云原生·面试·rpc·架构
一条咸鱼_SaltyFish6 小时前
WebFlux vs MVC:Gateway集成若依框架的技术选型之争
java·开发语言·微服务·gateway·mvc·开源软件·webflux
2501_944711437 小时前
前端向架构突围系列 - 工程化(五):企业级脚手架的设计与落地
前端·架构
明月醉窗台7 小时前
Ryzen AI --- AMD XDNA架构的部署框架
人工智能·opencv·目标检测·机器学习·计算机视觉·架构