Docker进阶:深入了解容器数据卷

news/2024/7/27 7:31:06/文章来源:https://blog.csdn.net/qq_41840843/article/details/136660495

Docker进阶:深入了解容器数据卷

  • 一、前言
  • 二、容器数据卷的作用
  • 三、容器数据卷的使用方法
  • 四、实战--使用docker部署前端项目(数据卷挂载)
    • 4.1 重要:准备工作,先在本地创建挂载目录
    • 4.2 启动一个临时的nginx容器,拷贝nginx容器内的初始配置文件
    • 4.3 重新挂载目录
    • 4.4 修改宿主机nginx的配置文件
    • 4.5 拷贝前端项目到挂载目录
    • 4.6 重启nginx容器,加载配置
  • 五、容器数据卷具名挂载、匿名挂载
    • 5.1 具名挂载(Named Volumes)
    • 5.2 匿名挂载(Anonymous Volumes)
    • 5.3 如何确定是具名挂载还是匿名挂载
    • 5.4 拓展:读写规则映射添加
  • 六、命令总结


💖The Begin💖点点关注,收藏不迷路💖

在这里插入图片描述

一、前言

在Docker中,容器数据卷是一个非常有用的功能,它可以用于实现容器与主机之间的数据共享和持久化存储。

容器数据卷的概念:

容器数据卷是Docker中用于实现数据持久化的一种机制。

它可以将容器内部的数据目录或文件与主机上的目录或文件进行映射,从而实现数据在容器和主机之间的共享和持久化存储。

二、容器数据卷的作用

在这里插入图片描述

1、数据共享:

容器数据卷可以让多个容器之间共享数据。比如,一个Web应用程序可能需要一个容器负责前端页面的展示,另一个容器负责处理后端逻辑,它们可以通过容器数据卷共享数据。

2、数据持久化:

容器数据卷可以实现数据在容器销毁或重新创建时的持久化存储。通常情况下,容器内部的数据在容器销毁后会丢失,而通过容器数据卷,我们可以将数据存储在主机上,从而保证数据的持久性。

3、数据备份和恢复:

容器数据卷可以用于数据的备份和恢复。我们可以将容器数据卷中的数据备份到主机上,以便在需要时进行恢复。

三、容器数据卷的使用方法

1、在运行 Docker 容器时,将宿主机上的一个目录(使用绝对路径表示)映射到容器内的指定目录中。以实现数据在宿主机和容器之间的共享和持久化存储。

具体命令如下:

docker run -it -v /宿主机绝对路径:/容器内目录 镜像名##其中,-it 表示以交互模式启动容器,-v /宿主机绝对路径:/容器内目录指定了数据卷的映射关系,镜像名表示要基于哪个镜像运行容器。

四、实战–使用docker部署前端项目(数据卷挂载)

运行一个 nginx 容器并将宿主机上的一个目录映射到容器内的指定目录中,让 nginx 使用自定义的配置文件来启动服务。**

在这里插入图片描述

4.1 重要:准备工作,先在本地创建挂载目录

mkdir /mynginx/conf
mkdir /mynginx/zyl-web
mkdir /mynginx/logs

在这里插入图片描述

如果没有先在本地创建有关文件,会启动报错如下:

如下:容器 mynginx 已经成功创建并运行,但是在 45 秒前已经退出。容器状态显示为 Exited (1)

报错1:2024/03/12 11:58:54 [emerg] 1#1: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)

报错2:2024/03/12 12:08:13 [emerg] 1#1: open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:18

在这里插入图片描述

4.2 启动一个临时的nginx容器,拷贝nginx容器内的初始配置文件

先启动一个临时的 nginx 容器,然后将容器内的初始配置文件拷贝到本地宿主机。

1、启动临时的 nginx 容器:

docker run -d --name=tmp-nginx -p 8000:80 nginxdocker ps

在这里插入图片描述

2、进入nginx容器

docker exec -it tmp-nginx /bin/bash

在这里插入图片描述

3、拷贝 nginx 配置文件到本地宿主机:

把tmp-nginx容器中/etc/nginx/目录下的文件(不包括该目录本身)复制到本地文件系统的/mynginx/conf/目录中。

docker cp tmp-nginx:/etc/nginx/. /mynginx/conf/

在这里插入图片描述

在这里插入图片描述

3、停止并删除临时的 nginx 容器:

docker stop tmp-nginx
docker rm tmp-nginx

在这里插入图片描述

4.3 重新挂载目录

需要多次使用 -v 参数来实现将多个目录或文件挂载到容器内。

将本地的 zyl-web/dist 目录挂载到容器内的 /usr/share/nginx/html 目录,conf 目录挂载到容器内的 /etc/nginx 目录,logs 目录挂载到容器内的 /var/log/nginx 目录。

##重新挂载docker run -d -p 8000:80 \
-v /mynginx/zyl-web/dist/:/usr/share/nginx/html \
-v /mynginx/conf:/etc/nginx \
-v /mynginx/logs:/var/log/nginx \
--name=mynginx nginx

在这里插入图片描述

4.4 修改宿主机nginx的配置文件

vi  nginx.conf

内容如下:

 server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {# 前端项目地址,注意:这里是容器内部的地址root /usr/share/nginx/html;# 默认访问的资源index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

在这里插入图片描述

4.5 拷贝前端项目到挂载目录

## 根据你项目而定
mv /zyl-web/* /mynginx/zyl-web/

在这里插入图片描述

4.6 重启nginx容器,加载配置

重新启动后,容器会继续使用之前加载的配置文件、数据和设置。

docker restart mynginx

在这里插入图片描述

2、进入mynginx容器,你会看到数据同步

docker exec -it mynginx /bin/bashcd /usr/share/nginx/html/

在这里插入图片描述

测试访问前端web项目:

在这里插入图片描述

这样发布前端项目、修改配置即可不用进到容器内部,而是在本地宿主机修改即可。

五、容器数据卷具名挂载、匿名挂载

5.1 具名挂载(Named Volumes)

具名挂载是通过为容器指定一个特定的卷(Volume)来实现的。

具名挂载可以为卷指定一个名称,并且可以在容器创建时或后续运行时进行管理。

具名挂载的优点是可以方便地管理和共享数据,同时也支持在多个容器之间共享数据。

具名挂载在容器的生命周期内保留数据,即使容器被删除,数据仍然存在。

例1:验证具名挂载,即使容器被删除,数据仍然存在。

1、创建具名挂载卷并运行容器

通过 -v  卷名:容器内路径 docker run -d -P --name=nginx01 -v juming-nginx:/etc/nginx nginx

2、检查名为 juming-nginx 的 Docker 卷的详细信息

##将返回有关指定卷的元数据和配置信息。
docker volume inspect juming-nginx

在这里插入图片描述

3、查看具名卷的数据目录

docker 在没有指定目录的情况下,容器内的卷都在’/var/lib/docker/volumes/卷名/_data

/var/lib/docker/volumes/ 是Docker 用于存储具名卷数据的默认路径。在这个路径下,Docker 会为每个具名卷创建一个单独的目录,并在其中保存卷的数据。

[root@zyl-server ~]# find / -name juming-nginx
/var/lib/docker/volumes/juming-nginx

在这个目录下,能够找到与 juming-nginx 具名卷相关联的数据目录。

即使容器被删除,这些数据目录仍然存在,说明数据得到了持久化存储。
在这里插入图片描述

4、进入容器内部,创建文件

docker exec -it nginx01 /bin/bashtouch test-juming.txt

在这里插入图片描述

5、验证删除前面创建的nginx01 容器,数据是否持久化存储

docker stop nginx01 
docker rm nginx01 

在这里插入图片描述

可以看到数据仍然存在,则说明具名挂载的数据是持久化的,即使容器被删除也不会丢失。

5.2 匿名挂载(Anonymous Volumes)

匿名挂载是在容器创建时自动创建的临时卷,没有指定一个特定的名称。匿名挂载的优点是可以快速创建和销毁临时数据,适用于临时存储或临时共享数据的场景。

匿名挂载在容器删除后会自动销毁,数据不会保留。

5.3 如何确定是具名挂载还是匿名挂载

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

5.4 拓展:读写规则映射添加

docker run -it --privileged=true  -v /宿主机绝对路径:/容器内目录:ro(只读,默认可读可写) 镜像名ro  ##只读,如果有ro则说明只能通过宿主机来操作,容器内无法操作
rw  ##可读可写

六、命令总结

docker run -d 镜像名  ##重启之后不会自动运行docker run -d --restart=always 镜像名  ##重启之后自动运行容器docker start 容器id/容器名     ##启动docker restart 容器id/容器名   ##重启docker stop  容器id/容器名     ##停止docker kill 容器id/容器名      ##kill进程docker ps                      ###列出当前运行的容器docker ps | grep 容器id/容器名   ## 查看进程是否正常docker ps -a                   ###列出所有容器docker exec -it 容器id/容器名 /bin/bash   ##进入容器docker logs 容器id/容器名      ###看容器的日志docker cp 容器id/容器名:/容器内文件路径 宿主机文件绝对路径  ##从容器复制文件到本地文件系统docker cp 宿主机文件绝对路径 容器id/容器名:容器内文件路径  ##从本地文件系统复制文件到容器内

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1005854.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用,人工智能…

前端去除网页水印

按F12,打开开发者工具面板,然后直接在样式搜索backgroud 然后直接取消backgroud 的复选框即可。

多数问题求解之蒙特卡洛与分治法

多数问题(Majority Problem)是一个有多种求解方法的经典问题,其问题定义如下: 给定一个大小为 n n n的数组,找出其中出现次数超过 n / 2 n/2 n/2的元素 例如:当输入数组为 [ 5 , 3 , 5 , 2 , 3 , 5 , 5 ] […

SkyEye:助力飞行器状态控制系统仿真

飞行器与常见的航天器一样,属于安全关键领域的大型复杂设备,对安全性、可靠性有着极高的要求。为保证稳定飞行,需要对目标对象进行实时跟踪,通过发出正确的修正偏差指令来操纵飞行器改变飞行姿态,因此对飞行器状态控制…

leetcode刷题(javaScript)——分治思想(二分查找、快速排序)相关场景题总结

分治思想是一种将问题分解成更小的子问题,然后解决子问题并将结果合并的算法设计策略。二分查找、快速排序和折半查找都属于分治思想的经典算法。在leetcode里,分治思想一般结合其他场景出现,构成复合型题目。但是在看题时一定要了解能否用分…

考研数学|武忠祥「高数」+李永乐「线代」刷题指南

如果你全程都决定跟着武忠祥老师和李永乐老师,一张表格教会你如何买资料,听课以及使用这些资料: 上面的方法很详细了,大家照着做就行了,关键是大家实际操作的过程中可能会遇到各种问题,这也是我在考研备考中…

隧道技术和代理技术(三)

隧道技术 知识点 -隧道技术:解决不出网协议上线的问题(利用出网协议进行封装出网) -代理技术:解决网络通讯不通的问题(利用跳板机建立节点后续操作) 内环境示意图,方便理解 思路:…

【LeetCode每日一题】2864. 最大二进制奇数

文章目录 [2864. 最大二进制奇数](https://leetcode.cn/problems/maximum-odd-binary-number/)思路:代码1: 2864. 最大二进制奇数 思路: 1.拼贴字符串。 2.遍历字符串s,统计1的个数。 3.如果只有一个1,将1放在末尾,…

java多线程(主要是如何创建线程,多线程,以及多线程的同步机制,同步机制主要是通过锁实现,就是synchronized关键字)

多线程 1、线程相关概念 (1)程序(program) 程序视为了完成特定的任务,用某种语言编写的一组指令的集合。也就是我们平时日常生活中写的代码。 (2)进程 进程: 是具有一定独立功能…

日常开发笔记20240338

文章目录 1.mybatis的Param注解2.mybatis的#{}和${}的使用与区别3. mybatis中where语句有可选条件有必选条件,怎么写4.mybatis的domain对象5.mapper接口返回Integer的问题6.bigdecimal的小数点位数7.vue的前端panel组件换图标 1.mybatis的Param注解 在写java的myba…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Rating)

提供在给定范围内选择评分的组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Rating(options?: { rating: number, indicator?: boolean }) 从API version 9开始&#…

漏洞发现-漏扫项目篇武装BURP浏览器插件信息收集分析辅助

知识点 1、插件类-武装BurpSuite-漏洞检测&分析辅助 2、插件类-武装谷歌浏览器-信息收集&情报辅助 章节点: 漏洞发现-Web&框架组件&中间件&APP&小程序&系统 扫描项目-综合漏扫&特征漏扫&被动漏扫&联动漏扫 Poc开发-Ymal语…

【Claude 3】一文谈谈Anthropic(Claude) 亚马逊云科技(Bedrock)的因缘际会

文章目录 前言1. Anthropic的诞生2. Anthropic的“代表作”——Claude 3的“三驾马车”3. 亚马逊云科技介绍4. 强大的全托管服务平台——Amazon Bedrock5. 亚马逊云科技(AWS)和Anthropic的联系6. Claude 3模型与Bedrock托管平台的关系7. Clude 3限时体验入口分享【⚠️截止3月1…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:QRCode)

用于显示单个二维码的组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 二维码组件的像素点数量与内容有关,当组件尺寸过小时,可能出现无法展示内容的情况,…

【李沐论文精读】GPT、GPT-2和GPT-3论文精读

论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…

基于PHP+Amaze+JQuery的学习论坛的设计与实现1.99

摘 要 互联网教育服务是在互联网技术、通信技术、计算机技术不断发展融合的基础之上,人们在对以信息为基础的各种各样应用需求快速增长的激励之下,在现在社会信息化的水平日益提高前提之下,迅速发展起来的一种全新大众服务方式。 笔者拟设计…

移动端uni-app小程序搜索高亮前端处理,同时可设置相关样式,兼顾性能

在uni-app中我们会遇到搜索高亮显示的需求 如下图: 起初用的是富文本实现 使用replaceAll方法取代搜索字段为一个 标签并设置相应的样式,但是小程序的并没有把 标签渲染出来,所以放弃了,下面原代码: /* 搜索字体变色…

JVM 类的加载篇

我们都知道一个类从加载到卸载一共分为七个过程 加载 - 链接(验证 - 准备 - 解析) - 初始化 - 使用 - 卸载 下文我们将详细解析这些过程 谁需要加载? 在Java中数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预定义,引用数据类型则需要类的加载 1.加载/装载(loa…

TCP 中的 Delay ACK 和 Nagle 算法

哈喽大家好,我是咸鱼。 今天分享一篇大佬的文章,作者:卡瓦邦噶! 文章链接:https://www.kawabangga.com/posts/5845 教科书介绍的 TCP 内容通常比较基础:包括三次握手,四次挥手,数…

STL之deque容器代码详解

1 基础概念 功能: 双端数组,可以对头端进行插入删除操作。 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低。 deque相对而言,对头部的插入删除速度回比vector快。 vector访问…