首页 > 其他分享 >Docker数据持久化挂载与卷(三)

Docker数据持久化挂载与卷(三)

时间:2024-03-05 17:58:04浏览次数:34  
标签:容器 持久 vol nginx html 挂载 Docker docker

前言

  前面学了Docker基本的使用和通信,但是由于容器的生命周期是短暂的,当容器被删除后,容器内的数据也会一并删除。为了保存数据,我们可以使用Docker Volume将数据存储在宿主机上,从而实现数据的持久化。

一、数据修改

  一般来看配置、数据等重要数据都需要变动,所以数据修改也是Docker容器存在的问题之一。

  这里有三种方式进行数据修改。

  1、 直接在容器内安装vim等工具修改(不推荐)

  2、 通过docker cp复制文件(一般)

  3、通过挂载宿主目录(或卷)到容器中(推荐)

  第一种方法存在很大的问题,主要很多镜像环境不全面,比如nginx你会发现vi、vim、nano等常见编辑器都没,而且修改完文件会随着容器删除而消失,这就使得无法数据持久化。

  第二种通过文件存在宿主目录中,然后进行修改数据,最后将数据通过docker cp命令复制到容器中。

~]# docker cp  a.txt  nginx:/home/a.txt

  第三种就是通过挂载宿主机子的目录(或卷)进行数据修改,也保证了容器删除时,目录能够保存下来。

二、挂载卷

  一般挂载分为挂载两种:

  1、挂载宿主的目录

  2、挂载docker管理的volume卷(也是一个目录)

  下面以Nginx为例,对两种挂载进行实践。挂载一般是docker run命令进行,所以可以认为只有新的容器才能进行挂载。

  第一种宿主的目录挂载。使用-v或者--mount进行挂载,而且可以多个目录挂载。

~]# docker run -v /home/nginx:/etc/nginx \ 
-v /home/html:/usr/share/nginx/html \
-d --name nginx -p 80:80 nginx:1.23

  然后,你在宿主/home/html目录下创建a.txt文件,在进入容器中/etc/nginx就会看到a.txt文件也出现了。

  但是在测试的时候有一个问题,就是挂载宿主目录时会覆盖容器的目录文件(空目录也会),所以一般都是以宿主目录为主。

  比如/home/html文件夹下存在index.html,而/usr/share/nginx/html文件夹下存在50x.html、index.html,会覆盖index.html,并且删除50x.html文件。

  第二种使用volume卷挂载,这个方式应该是Docker推荐的方式。

~]# docker volume create vol-nginx #创建名为vol-nginx的卷
~]# docker prune #删除未使用的卷
~]# docker volume rm vol-nginx #删除一个或多个卷
~]# docker volume ls #列出所有卷
~]# docker inspect vol-nginx #查看卷信息,Mountpoint是卷在宿主机子中的位置

  将vol-nginx卷挂载到nginx容器中,使用卷,若卷为空,则会复制容器内的文件夹下内容,若非空,则会使用宿主文件夹下的文件。

~]# docker run -v vol-nginx:/usr/share/nginx/html -d --name nginx -p 80:80 nginx:1.23 # -v 卷名:容器目录

或挂载多个目录,但是需要不同卷对应目录,不然就会产生覆盖问题。

~]# docker run -d --name nginx \  
  -v vol-nginx:/usr/share/nginx/html \  
  -v vol-nginx2:/etc/nginx \  
  -p 80:80 nginx:1.23

  最后进入/var/lib/docker/volumes/vol-nginx/_data中修改文件内容,再进入容器/usr/share/nginx/html映射的位置就能看到文件内容发生改变。

  删除容器后,/var/lib/docker/volumes/vol-nginx/_data中的文件也会存在,并且下次继续挂载容器,也会重新覆盖掉新容器中的/usr/share/nginx/html的文件夹。

标签:容器,持久,vol,nginx,html,挂载,Docker,docker
From: https://www.cnblogs.com/zrl66/p/18054375

相关文章

  • 无人直播,云SRS,Docker一键搭建安装教程
    如果有服务器并已经安装Docker,可以直接从第四步开始。第一步:选购轻量应用服务器并安装Ubuntu22或者20系统。境外服务器以香港和日本、新加坡为佳。24小时无人直播流量需求比较大,请按照视频码率自己算好,超出后流量非常昂贵。【以视频码率5000为例:5000/8/1024*3600*24*31/1024/102......
  • .Net项目部署到Docker
    .Net项目部署到Docker环境linuxdocker.Net7步骤编写Dockerfile上传项目文件到linux运行项目文件到docker一、设置项目端口在Program.cs文件设置端口builder.WebHost.UseUrls("http://*:1040");//单个设置二、添加Dockerfile文件点击Docker支持,会弹框选择lin......
  • Windows环境下Pytorch项目搭建在Docker中运行
    Windows环境下Pytorch项目搭建在Docker中运行1.安装windows版本的Docker​ 网上已有诸多博客教程,这里就不再赘述。2.搭建本地Pytorch环境​ 搭建本地Pytorch环境的方式我使用了两种方式,推荐使用第一种。​ 第一种:​ (1)在dockerhub中(https://hub.docker.com),找到自己版本......
  • Docker多容器和通信搭建(二)
    前言前面介绍了Docker容器的基础服务搭建,对于Docker容器来说一般都是多个容器项目运行在服务器上。所以这篇主要讲述多容器之间的交互,以及宿主与容器之间的交互问题。一、部署多容器接着以Nginx为例,部署多个Nginx容器进行测试。~]#dockerrun-d--namenginx-p80......
  • 【HarmonyOS】如何实现数据持久化不会被应用卸载而清除
    【关键字】数据持久化,AssetStoreKit 【问题】最近在学习HarmonyOSpreivewer,遇到了一个场景,跟大家分享一下。核心的需求是需要做一个数据持久化的能力,但是将数据缓存在应用沙箱的files目录下后,每次重启应用确实能够查到存储的数据,一旦将应用卸载重装,或者清除应用数据后,就......
  • ConfigMap挂载与Subpath在Nginx容器中的应用
    本文分享自华为云社区《nginx.conf以configmap文件形式挂载到nginx容器中以及subpath使用场景》,作者:可以交个朋友。背景nginx.conf通过configmap文件形式挂载到容器内,可以更加方便的修改nginx.conf配置方案简介将配置文件nginx.conf以configmap文件的方式挂载到容器中。为了更......
  • docker安装Rabbitmq
    搜索rabbitmq镜像dockersearchrabbitmq默认拉取最新版本镜像dockerpullrabbitmq创建并运行rabbitmq容器dockerrun-d--hostnamemy-rabbit--namemy-rabbit-p15672:15672-p5673:5672rabbitmq-d:该选项表示在后台(detachedmode)运行Docker容器,即启动一个守护......
  • 从零开始写 Docker(四)---使用 pivotRoot 切换 rootfs 实现文件系统隔离
    change-rootfs-by-pivot-root.png本文为从零开始写Docker系列第四篇,在mydockerrun基础上使用pivotRoot系统调用切换rootfs实现容器和宿主机之间的文件系统隔离。完整代码见:https://github.com/lixd/mydocker欢迎Star推荐阅读以下文章对docker基本实现有一个大......
  • 怎么使用Docker运行Python代码
    需要使用Docker镜像运行Python代码编写Dockefile文件示例如下#需要使用的镜像版本FROMpython:3.11#代码工作目录WORKDIR/code#拷贝依赖文件COPYrequirements.txtrequirements.txt#安装依赖RUNpipinstall-rrequirements.txt-ihttps://pypi.doubanio.com/......
  • Docker容器实战(00)-基础命令大全
    1容器生命周期管理1.1dockerstart启动一或多个已被停止的容器。#启动已被停止的容器myrunoobdockerstartmyrunoob1.2dockerstop停止一个运行中的容器dockerstopmyrunoob1.3dockerrestart重启容器dockerrestartmyrunoob1.4dockerrun创建一个新的容......