返回顶部
首页 > 资讯 > 精选 >Docker实现挂载的方式有哪些
  • 740
分享到

Docker实现挂载的方式有哪些

2023-07-05 06:07:41 740人浏览 薄情痞子
摘要

这篇文章主要讲解了“Docker实现挂载的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker实现挂载的方式有哪些”吧!Docker实现挂载的方式在介绍VOLUME指令之前,

这篇文章主要讲解了“Docker实现挂载的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker实现挂载的方式有哪些”吧!

    Docker实现挂载的方式

    在介绍VOLUME指令之前,我们来看下如下场景需求:

    容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上。一旦容器删除后,这些数据就没了,除非我们人工备份下来(或者基于容器创建新的镜像)。能否可以让容器进程持久化的数据保存在主机上呢?这样即使容器删除了,数据还在。

    当我们在开发一个WEB应用时,开发环境是在主机本地,但运行测试环境是放在docker容器上。这样的话,我在主机上修改文件(如htmljs等)后,需要再同步到容器中。这显然比较麻烦。

    多个容器运行一组相关联的服务,如果他们要共享一些数据怎么办?

    对于这些问题,我们当然能想到各种解决方案。而docker本身提供了一种机制,可以将主机上的某个目录与容器的某个目录(称为挂载点、或者叫卷)关联起来,容器上的挂载点下的内容就是主机的这个目录下的内容,这类似linux系统下mount的机制。 这样的话,我们修改主机上该目录的内容时,不需要同步容器,对容器来说是立即生效的。 挂载点可以让多个容器共享。

    一、通过docker run命令

    运行命令:docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash

    其中的 -v 标记 在容器中设置了一个挂载点 /data(就是容器中的一个目录),并将主机上的 /home/xqh/myimage 目录中的内容关联到 /data下。

    这样在容器中对/data目录下的操作,还是在主机上对/home/xqh/myimage的操作,都是完全实时同步的,因为这两个目录实际都是指向主机目录。

    运行命令:docker run --name test1 -it -v /data ubuntu /bin/bash

    上面-v的标记只设置了容器的挂载点,并没有指定关联的主机目录。这时docker会自动绑定主机上的一个目录。通过docker inspect 命令可以查看到。

    xqh@ubuntu:~/myimage$ docker inspect test1[{    "Id": "1fd6c2c4bc545163D8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c",.............................    "Mounts": [        {            "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01",            "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data",            "Destination": "/data",            "Driver": "local",            "Mode": "",            "RW": true        }    ],

    上面 Mounts下的每条信息记录了容器上一个挂载点的信息,“Destination” 值是容器的挂载点,"Source"值是对应的主机目录。可以看出这种方式对应的主机目录是自动创建的,其目的不是让在主机上修改,而是让多个容器共享。

    二、通过dockerfile创建挂载点

    上面介绍的通过docker run命令的-v标识创建的挂载点只能对创建的容器有效。通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。

    还有一个区别是,通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。

    #testFROM ubuntuMaiNTAINER hello1VOLUME ["/data1","/data2"]

    上面的dockfile文件通过VOLUME指令指定了两个挂载点 /data1 和 /data2.

    我们通过docker inspect 查看通过该dockerfile创建的镜像生成的容器,可以看到如下信息

    "Mounts": [    {        "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21",        "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data",        "Destination": "/data1",        "Driver": "local",        "Mode": "",        "RW": true    },    {        "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36",        "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data",        "Destination": "/data2",        "Driver": "local",        "Mode": "",        "RW": true    }],

    可以看到两个挂载点的信息。

    三、容器共享卷(挂载点)

    下面我们创建另一个容器可以和test1(已经创建好的容器)共享 /data1 和 /data2卷,这是在 docker run中使用 --volumes-from标记,如:

    可以是来源不同镜像,如:

    docker run --name test2 -it --volumes-from test1 ubuntu /bin/bash

    也可以是同一镜像,如:

    docker run --name test3 -it --volumes-from test1 myimage /bin/bash

    上面的三个容器 test1 , test2 , test3 均有 /data1 和 /data2 两个目录,且目录中内容是共享的,任何一个容器修改了内容,别的容器都能获取到。

    四、最佳实践:数据容器

    如果多个容器需要共享数据(如持久化数据库、配置文件或者数据文件等),可以考虑创建一个特定的数据容器,该容器有1个或多个卷。

    其它容器通过–volumes-from 来共享这个数据容器的卷。

    因为容器的卷本质上对应主机上的目录,所以这个数据容器也不需要启动。

    如: docker run --name dbdata myimage echo “data container”

    说明:有个卷,容器之间的数据共享比较方便,但也有很多问题需要解决,如权限控制、数据的备份、卷的删除等。以后在介绍。

    关于Docker中挂载的解释

    现在有这么一个命令:

    docker run -p 33061:3306 --name mysql  --restart=always -e Mysql_ROOT_PASSWord=pisen  -v /etc/localtime:/etc/localtime:ro  -v /etc/timezone:/etc/timezone:ro  -d mysql:5.7

    因为着重要说挂载的问题,就单独揪出来参数来说

    -v /etc/localtime:/etc/localtime:ro

    就是将  宿主机的/etc/localtime文件挂载到容器的/etc/localtime 文件,并且容器内的/etc/localtime文件设置为只读(:ro)

    实际的效果就是mysql容器启动后,时间时区的设置,使用的就是宿主机的 /etc/localtime 文件内设置的内容起作用。

    如果没有设置只读的情况下,该挂载实现的效果是:

    情况1:使用echo命令去修改

    echo 'lq' > timezone

    无论更改宿主机上的/etc/localtime文件内容还是修改容器内的/etc/localtime文件内容,都会影响到对方。  

    情况2:使用vi命令去修改

    vi timezone

    则无论修改哪边都不会影响到另外一方的文件内容。

    感谢各位的阅读,以上就是“Docker实现挂载的方式有哪些”的内容了,经过本文的学习后,相信大家对Docker实现挂载的方式有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: Docker实现挂载的方式有哪些

    本文链接: https://lsjlt.com/news/350044.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Docker实现挂载的方式有哪些
      这篇文章主要讲解了“Docker实现挂载的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker实现挂载的方式有哪些”吧!Docker实现挂载的方式在介绍VOLUME指令之前,...
      99+
      2023-07-05
    • Docker 实现挂载的三种方式
      一.为什么有挂载 容器中运行的应用,有可能会产生数据,如果将数据直接存储到容器中,如果删除容器时,容器中的数据会一起被删除,例如: 如果运行的是数据库容器,数据库容器直接保存的数据文件,删除容器时,容易导致数据丢失 为了防止数据丢失,可以把...
      99+
      2023-09-05
      docker 容器 运维 java
    • docker进行数据挂载的模式有哪些
      今天小编给大家分享一下docker进行数据挂载的模式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Docker 提供了...
      99+
      2023-06-30
    • Docker之实现挂载的三种方式汇总
      目录Docker实现挂载的方式一、通过docker run命令二、通过dockerfile创建挂载点三、容器共享卷(挂载点)四、最佳实践:数据容器关于Docker中挂载的解释总结Do...
      99+
      2023-02-25
      Docker挂载 Docker实现挂载 Docker挂载方式
    • docker的具名挂载与匿名挂载实现
      大家好,今天我们分享一下docker 的具名挂载与匿名挂载 以这条命令举例 [root@localhost ~]# docker run -d -P --name nginx02 ...
      99+
      2024-04-02
    • 负载均衡的实现方式有哪些
      负载均衡的实现方式有以下几种:1. 基于硬件的负载均衡:使用专门的硬件设备,如负载均衡器(Load Balancer)或者交换机(S...
      99+
      2023-09-07
      负载均衡
    • nginx实现负载均衡的方式有哪些
      nginx实现负载均衡的方式有三种:1. 基于IP Hash的负载均衡:nginx根据客户端的IP地址进行哈希计算,将同一个IP的请...
      99+
      2023-10-09
      nginx
    • java实现文件下载的方式有哪些
      在Java中,可以使用以下方式实现文件下载: 使用URL和URLConnection类:可以通过创建URL对象,然后打开连接并获取...
      99+
      2024-04-08
      java
    • docker的安装方式有哪些
      本篇内容主要讲解“docker的安装方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“docker的安装方式有哪些”吧!docker的安装方式Docker 是一个开源的应用容器引擎,让开发...
      99+
      2023-07-05
    • Docker volume挂载卷如何实现
      今天小编给大家分享一下Docker volume挂载卷如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
      99+
      2024-04-02
    • 实现负载均衡技术的方式有哪些
      实现负载均衡技术的方式有:1、通过http重定向协议实现负载均衡;2、dns域名解析负载均衡;3、反向代理负载均衡;4、在网络层通过修改目标IP地址进行负载均衡;5、在数据链路层修改Mac地址进行负载均衡;6、使用F5硬件负载均衡设备实现。...
      99+
      2024-04-02
    • centos挂载点有哪些
      centos中常用的挂载点有:1./bin,存放常用命令;2./sbin,存放系统管理员命令;3./var,存放日志文件;4./opt,存放第三方文件;5./boot,存放启动内核文件;6./home,存放用户宿主文件夹;7./tmp,存放...
      99+
      2024-04-02
    • docker 挂载MySQL实现数据持久化的实现
      目录环境配置MySQL数据持久化注意事项环境配置 本地操作系统:Win10虚拟机的操作系统:CentOS Stream 8已安装docker,可以参考详细安装教程 MySQL数据持久...
      99+
      2024-04-02
    • linux查看磁盘挂载的方法有哪些
      本篇内容介绍了“linux查看磁盘挂载的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一种方法:使用df命令,例如:代码如下:o...
      99+
      2023-06-13
    • 有哪些LFU实现方式
      本篇内容主要讲解“有哪些LFU实现方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些LFU实现方式”吧!LFU实现力扣原题描述如下:请你为 最不...
      99+
      2024-04-02
    • Linux挂载的知识点有哪些
      Linux挂载的知识点有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在 Linux 系统中,可以通过挂载的方式来使用一些外部设备,这种情况下需要我们掌握的知识点主要有...
      99+
      2023-06-28
    • web中实现负载均衡技术的方式有哪些
      本篇内容主要讲解“web中实现负载均衡技术的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web中实现负载均衡技术的方式有哪些”吧!负载均衡(Load Balance)是集群技术(Cl...
      99+
      2023-06-05
    • docker镜像的构建方式有哪些
      Docker镜像的构建方式有以下几种:1. 基于已有镜像:可以通过在已有镜像的基础上进行修改和定制来构建新的镜像。这种方式可以通过D...
      99+
      2023-09-18
      docker
    • docker启动容器的方式有哪些
      Docker启动容器的方式有以下几种:1. 使用`docker run`命令启动容器,例如:`docker run `。2. 使用`...
      99+
      2023-09-16
      docker
    • Docker存储管理的方式有哪些
      这篇“Docker存储管理的方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Docker存储管理的方式有哪些”文章吧...
      99+
      2023-07-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作