当前位置: 首页 > news >正文

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 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💖点点关注,收藏不迷路💖

相关文章:

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

Docker进阶:深入了解容器数据卷 一、前言二、容器数据卷的作用三、容器数据卷的使用方法四、实战--使用docker部署前端项目(数据卷挂载)4.1 重要:准备工作,先在本地创建挂载目录4.2 启动一个临时的nginx容器&#xff0…...

升级版本彻底解决bootstrap-table-fixed-columns固定列后行对不齐问题

升级到bootstrap-table和bootstrap-table-fixed-columns版本都升级到v1.22.3版本以上,即可解决该问题 bootstrap-table:bootstrap-table/dist/bootstrap-table.min.css at develop wenzhixin/bootstrap-table GitHub bootstrap-table-fixed-columns&…...

打破边界:深入探索STUN在实现无缝NAT穿越和WebRTC通信中的核心作用

引言 STUN是一个网络协议,设计用于帮助在网络地址转换(NAT)后面的设备发现其公网地址和端口号。通过允许这些设备发现自己从外部看到的地址,STUN使得它们能够在NAT或防火墙背后建立端到端的通信,这对于VoIP、视频会议…...

浅谈 前端的动态绑定属性

目录 前言1. 基本知识2. Demo 前言 作为Java开发者&#xff0c;从开发转到全栈&#xff0c;前端好些细节都需要科普&#xff0c;这不就来个动态绑定属性 起因是这个&#xff1a; <uni-tr> <uni-td align"center" :rowspan"checkTypesCount 1"…...

Sklearn支持向量机

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种常用的分类算法&#xff0c;它可以用于解决二分类和多分类问题。在Python中&#xff0c;你可以使用Sklearn库来实现SVM。下面是一个简单的例子&#xff0c;展示了如何使用Sklearn进行SVM分类。 # 导入必要…...

【Lazy ORM】 小工具 acw 本地客户端 你负责点击页面,他负责输出代码

介绍 wu-smart-acw-client 简称acw-client&#xff0c;是一个基于Lazy ORM定制的客户端代码生成小工具 Lazy ORM 小工具 acw 本地客户端 你负责点击页面&#xff0c;他负责输出代码安装 <dependency><groupId>top.wu2020</groupId><artifactId>wu-sma…...

《详解:鸿蒙NEXT开发核心技术》

我们现在都知道鸿蒙作为一个国产的全栈自研系统&#xff0c;经过国家主推后。已经引起人们很大的关注&#xff0c;其中作为开发者来说&#xff1b;许多一线大厂已经与其华为鸿蒙展开原生应用的合作了&#xff0c;目前了解到已经有200家。而之后出现了很多的高薪鸿蒙开发岗位&am…...

快速排序 刷题笔记

思路 分治双指针 在每个区间选定一个基准目标 两个指针从数组的两边向中间推进 使用 while循环判断 do {i;}while(q[i]<x); do{j--;}while(q[j]>x); 每次这样做完就会找到q[i]>x,,,,q[j]小于x 此时我们交换 q[i] ,q[j]于是小于x的数分到了小于x的一侧 大…...

DAY by DAY 史上最全的Linux常用命令汇总----man

man是按照手册的章节号的顺序进行搜索的。 man设置了如下的功能键&#xff1a; 功能键 功能 空格键 显示手册页的下一屏 Enter键 一次滚动手册页的一行 b 回滚一屏 f 前滚一屏 q 退出man命令 h 列出所有功能键 /word 搜索word字符串 注意&#xff1a…...

十六、接口隔离原则、反射、依赖注入

接口隔离原则、反射、特性、依赖注入 接口隔离原则 客户端不应该依赖它不需要的接口&#xff1b;一个类对另一个类的依赖应该建立在最小的接口上。 五种原则当中的i 上一章中的接口&#xff0c;即契约。 契约就是在说两件事&#xff0c;甲方说自己不会多要&#xff0c;乙方会在…...

Docker 进阶

1、容器数据卷 什么是容器数据卷&#xff1f; 就是当容器内存在了mysql&#xff0c;在里面书写了数据&#xff0c;如果容器删除了&#xff0c;那么数据也就没有了&#xff0c;通过容器数据卷的技术&#xff0c;可以让容器内的数据持久化到Linux服务器上 操作 #docker run -…...

科研学习|论文解读——一种修正评分偏差并精细聚类中心的协同过滤推荐算法

知网链接 一种修正评分偏差并精细聚类中心的协同过滤推荐算法 - 中国知网 (cnki.net) 摘要 协同过滤作为国内外学者普遍关注的推荐算法之一&#xff0c;受评分失真和数据稀疏等问题影响&#xff0c;算法推荐效果不尽如人意。为解决上述问题&#xff0c;本文提出了一种改进的聚类…...

云计算项目十一:构建完整的日志分析平台

检查k8s集群环境&#xff0c;master主机操作&#xff0c;确定是ready 启动harbor [rootharbor ~]# cd /usr/local/harbor [rootharbor harbor]# /usr/local/bin/docker-compose up -d 检查head插件是否启动&#xff0c;如果没有&#xff0c;需要启动 [rootes-0001 ~]# system…...

2.经典项目-海量用户即使通讯系统

1.实现功能-完成注册用户 完成用户注册的步骤(客户端) 1.将User移动到common/message文件夹下 2.在message中新增注册用户的结构体 const (LoginMesType "LoginMes"LoginResMesType "LoginResMes"RegisterMesType "RegisterMes"…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通标志识别系统详解(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本篇博客详细介绍了利用深度学习构建交通标志识别系统的过程&#xff0c;并提供了完整的实现代码。该系统采用了先进的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了性能评估对比&#xff0c;分析了性能指标如mAP、F1 Score等。文章深入探…...

VMware下创建虚拟机

Centos7是比较常用的一个Linux发行版本&#xff0c;在国内的使用比例比较高 安装完VMware一定要检查虚拟网卡有没有安装成功&#xff0c;如果没有VMnet1和VMnet8 虚拟机是无法上网的&#xff0c;就需要卸载重启电脑重新安装 控制面板—网络和Internet—网络连接 快捷方式打开&a…...

基于Ambari搭建大数据分析平台

一、部署工具简介 1. Hadoop生态系统 Hadoop big data ecosystem in Apache stack 2. Hadoop的发行版本 Hadoop的发行版除了Apache的开源版本之外&#xff0c;国外比较流行的还有&#xff1a;Cloudera发行版(CDH)、Hortonworks发行版&#xff08;HDP&#xff09;、MapR等&am…...

Vue template到render过程,以及render的调用时机

Vue template到render过程 vue的模版编译过程主要如下&#xff1a;template -> ast -> render函数&#xff08;1&#xff09;调用parse方法将template转化为ast&#xff08;抽象语法树&#xff09;&#xff08;2&#xff09;对静态节点做优化&#xff08;3&#xff09;生…...

阿里云服务器Ngnix配置SSL证书开启HTTPS访问

文章目录 前言一、SSL证书是什么&#xff1f;二、如何获取免费SSL证书三、Ngnix配置SSL证书总结 前言 很多童鞋的网站默认访问都是通过80端口的Http服务进行访问&#xff0c;往往都会提示不安全&#xff0c;很多人以为Https有多么高大上&#xff0c;实际不然&#xff0c;他只是…...

12 list的使用

文档介绍 文档介绍 1.list是可以在常数范围内的任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代 2.list的底层是带头双向链表循环结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...