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

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 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.mzph.cn/news/740604.shtml

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

相关文章

pytorch(九)卷积神经网络

文章目录 卷积神经网络全连接神经网络与卷积神经网络的区别概念性知识mnist数据集(卷积神经网络) GoogLeNetInception 残差网络ResNet残差块结构 稠密连接网络网络结构 卷积神经网络 全连接神经网络与卷积神经网络的区别 全连接神经网络是一种最为基础的前馈神经网络&#xf…

ChatGPT Prompt 的原理总结

ChatGPT Prompt 的原理总结 ChatGPT Prompt 是 OpenAI 开发的大型语言模型 ChatGPT 的一种使用方式。通过 Prompt,用户可以引导 ChatGPT 生成特定内容,例如回答问题、写故事、写代码等等。 Prompt 的原理 Prompt 本质上是一段文本,它告诉 C…

处理json异常问题,由于发送kafka消息是一个字符串,等到消费时json字符串会有多个““引号,故需要先处理json再转对象

发送一个正确的json对象 发送kafka消息也是一个json传,也没问题 等到消费kafka时,也能接收到一个json字符串但是会多一个 " 引号, 就会导致json转对象失败所以需要先去除 开通和结尾的 " 引号 去除后的json 就是一个正常的json&…

河北专升本(C语言编程题)

一:基础算法原理 1. 冒泡排序 原理:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例,第一轮比较后,所有数中最大的…

Linux进程概念(2)

一、进程状态 Linux的进程状态实际上就是 struct task_struct 结构体中的一个变量 1.1状态汇总 其中,Linux 状态是用数组储存的,如下: static const char * const task_state_array[] { "R (running)", // 0 …

【Web世界探险家】打开Web世界的大门

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ &…

唯众物联网+地理科学交付云南师范大学地理学部教学实验室项目

近日,云南师范大学地理学部教学实验室建设项目顺利交付。该项目的成功落地,标志着物联网技术与地理科学教育的深度融合,为云南师范大学的地理教学提供了全新的教学平台与资源。该项目以物联网技术为核心,结合地理科学的特点&#…

蓝桥杯算法错题记录-基础篇

文章目录 本文还在跟新,最新跟新时间3/11!!! 格式一定要符合要求,(输入,输出格式)1. nextInt () next() nextLine() 的注意事项2 .数的幂 a^2等3.得到最大长度(最大...&a…

卡尔曼滤波器笔记——最详细

笔记来源— 卡尔曼滤波算法原理及代码实现!https://www.bilibili.com/video/BV1WZ4y1F7VN/?spm_id_from333.337.search-card.all.click&vd_source8d55784dc9c7530bc9e3fa220380be56 简单介绍一下 现在我们就是不知道是距离多少,就需要用到这个卡尔…

如何将应用一键部署至多个环境?丨Walrus教程

在 Walrus 平台上,运维团队在资源定义(Resource Definition)中声明提供的资源类型,通过设置匹配规则,将不同的资源部署模板应用到不同类型的环境、项目等。与此同时,研发人员无需关注底层具体实现方式&…

CSS元素显示模式

CSS元素显示模式 定义&#xff1a;元素显示模式是指元素&#xff08;即标签&#xff09;以什么方式进行显示。 HTML元素分为块元素和行内元素 块元素 常见块元素 &#xff08;下列仅举出部分&#xff09; <h1>~<h6>、<p>、<div>、<ul>、<…

【数据分享】2008-2022年全国范围逐月NO2栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据、2013-2022年全国范围逐月SO2栅格数据、2013-2022年全国范围逐月CO栅格数据和2000-2022年全国范围逐月PM10栅格数据&#xff08;可查看之前的文章获悉详…

properties文件和yml文件的区别以及文件优先级

properties文件和yml文件的区别 yml是按照缩进关系&#xff0c;而properties用"."来表示关系springboot默认生成的是properties文件当properties文件和yml文件都存在时&#xff0c;properties文件的优先级更高。 properties文件的样式 yml文件的样式 文件优先级 r…

Shell常用脚本:hadoop集群启动、停止、重启脚本

脚本内容以我搭建的hadoop集群为例&#xff0c;你们自用的时候自行根据你们的情况进行修改即可 hadoop-cluster-manager.sh #!/bin/bash # 1. 调用此脚本前&#xff0c;请使用ssh-keygen -t rsa、ssh-copy-id -f 目标机器这两个命令使得目标机器是免密登录的 # 2. ssh远程执行…

第五篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas在教育数据和研究数据处理领域的应用

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在教育和学术研究中的常见应用介绍二、数据清洗和预处理示例代码三、数据分析和统计示例代码四、数据可视化示例代码五、时间序列分析示例代码六、数据导入和导出示例代码七、数…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间的性能…

JavaParser的快速介绍

开发的工作主要是写代码&#xff0c; 有考虑过使用代码写代码&#xff0c; 使用代码分析和改进代码吗&#xff1f; JavaParser 就可以帮你用来处理Java 代码的这些功能。 Java Parser 的介绍 Java Parser是一个用于解析和分析Java源代码的开源工具。它提供了一个API接口&…

Tomcat Nginx的动静分离

1.单机反向代理&#xff1a; 实验&#xff1a;7-3 做客户机&#xff0c;7-2做代理服务器&#xff0c;7-1 tomcat 服务器 数据传输从7-3到7-2到7-1 配置&#xff1a; 7-1为之前的虚拟机配置 7-2做代理服务器配置&#xff1a; 7-3客户机配置&#xff1a; 测试&#xff1a; 2…

3.自定义工程目录配置CMakeLists

问题背景 熟悉stm32keil开发的都知道&#xff0c;我们在编写不同的外设时&#xff0c;通常都会单独编写一个app文件夹或者是user文件夹之类的来存放不同外设功能的源文件和头文件。 在前面一节2.构建第一个工程并烧录到ESP32开发板-CSDN博客中&#xff0c;我们是使用了一个乐鑫…

elementui el-table表格自动循环滚动【超详细图解】

效果如图 1. 当表格内容超出时&#xff0c;自动滚动&#xff0c;滚动到最后一条之后在从头滚动。 2. 鼠标移入表格中&#xff0c;停止滚动&#xff1b;移出后&#xff0c;继续滚动。 直接贴代码 <template><div><div class"app-container"><e…