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

这篇具有很好参考价值的文章主要介绍了Docker进阶:深入了解容器数据卷。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

一、前言

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

容器数据卷的概念:

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

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

二、容器数据卷的作用

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

1、数据共享:

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

2、数据持久化:

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

3、数据备份和恢复:

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

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

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

具体命令如下:

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

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

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

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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

如下:容器 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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

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

1、启动临时的 nginx 容器:

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

docker ps

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

2、进入nginx容器

docker exec -it tmp-nginx /bin/bash

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

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

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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

docker stop tmp-nginx
docker rm tmp-nginx

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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;
        }
    }

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

4.6 重启nginx容器,加载配置

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

docker restart mynginx

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

docker exec -it mynginx /bin/bash

cd /usr/share/nginx/html/

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

测试访问前端web项目:

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

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

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

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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 具名卷相关联的数据目录。

即使容器被删除,这些数据目录仍然存在,说明数据得到了持久化存储。
Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

docker exec -it nginx01 /bin/bash

touch test-juming.txt

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

docker stop nginx01 
docker rm nginx01 

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生

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

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/容器名:容器内文件路径  ##从本地文件系统复制文件到容器内

Docker进阶:深入了解容器数据卷,容器化与编排技术深度解析,docker,容器,运维,容器数据卷,部署前端项目(数据卷挂载),具名、匿名挂载,云原生文章来源地址https://www.toymoban.com/news/detail-839647.html


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

到了这里,关于Docker进阶:深入了解容器数据卷的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 虚拟化容器化与docker

    物理机 : 实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。 虚拟化 :是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算

    2024年02月16日
    浏览(41)
  • Kubernetes日志查看指南:深入了解容器日志管理技术

    简介: Kubernetes(简称K8s)已成为现代容器化应用程序管理的主要平台之一。了解如何有效地查看和管理Kubernetes集群中的容器日志对于故障排除、性能优化和安全监控至关重要。本文将向您介绍一些基本的技术和工具,帮助您在Kubernetes环境中查看和分析容器日志。 查看单个

    2024年02月12日
    浏览(39)
  • 【Docker】深入理解Docker:一种革新性的容器技术

    前言   Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介: 热爱跑步的恒川 ,致

    2024年02月05日
    浏览(42)
  • 【深入探索Docker】:开启容器化时代的技术奇迹

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:小智带你闲聊 🎉代码仓库:小智的代码仓库 在当今快节奏的软件开发和部署环境中,Docker作为一种容器化平台已经成为备受关注的技术奇迹。它革新了应用程序的交付方式,为开发人员和运维团

    2024年02月16日
    浏览(41)
  • 大数据ClickHouse进阶(六):Distributed引擎深入了解

    文章目录 Distributed引擎深入了解 一、简单介绍 二、分布式表插入数据

    2024年01月15日
    浏览(36)
  • 【云原生进阶之容器】第一章Docker核心技术1.1节——Docker综述

          《重识云原生系列》专题各章首节索引: 第一章——不谋全局不足以谋一域 第二章计算第1节——计算虚拟化技术总述 第三章云存储第1节——分布式云存储总述 第四章云网络第一节——云网络技术发展简述 第六章容器6.1.1节——容器综述    《云原生进阶之容器》

    2023年04月16日
    浏览(47)
  • 探索云原生容器编排技术:如Kubernetes如何为大数据处理和AI模型的自动化部署带来便利

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:云原生 ✨文章内容: 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 Kubernetes是一个强大的容器编排和自动化部署工具,它为大数据处理和

    2024年02月10日
    浏览(58)
  • 容器技术发展和编排技术演进之路

    目录 Jail 时代 1979 年 贝尔实验室发明 chroot 2000 年 FreeBSD 4.0 发行 FreeBSD Jail 2001 年 Linux VServer 发行 2004 年 Solaris Containers 发行 云时代 2006 年 google 推出 Process Containers 2008 年 LXC 推出 2011 年 CloudFoundry 推出 Warden 2013 年 LMCTFY 启动 2013 年 Docker 推出到风靡全球 云原生时代 Google Docke

    2024年02月12日
    浏览(57)
  • 45了解容器编排工具 Kubernetes 的基本概念和应用,包括 Pod、Service

    Kubernetes 是一种用于自动部署、扩展和管理容器化应用程序的开源容器编排工具。它可以轻松地管理和编排应用程序容器,确保它们在大规模的云环境中高效、可靠地运行。本教程将介绍 Kubernetes 的基本概念和应用,包括 Pod 和 Service。 Pod 是 Kubernetes 中最小的可部署对象,是

    2024年02月08日
    浏览(41)
  • 【Docker】Docker容器编排

    docker compose 实现单机容器集群编排管理(使用一个模板文件定义多个应用容器的启动参数和依赖关系,并使用docker compose来根据这个模板文件的配置来启动容器) Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose #下载 curl -L https://github.com/docke

    2024年02月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包