Docker volume 挂载卷的实现方法

最简单的hello world输出镜像的制作是最简单的开始,但是如果我们需要修改我们的运行代码,或者有输入输出文件的时候,我们就没有办法了,每一个container运行完毕后,其分配的资源以及文件系统都会消失,那么我们就需要在本地给docker container挂载一个卷,这样在container运行的时候,container的挂载点下的文件操作,也同样会影响到给container挂载的本地卷。就像linux中的mount一样。这样我们只需要修改本地卷中的代码,而不需要修改image即可。

例如我们创建一个Dockerfile文件:

其中:

VOLUME:是在container中创建一个挂载点,我们可以将本地的一个文件卷挂载在container的/data下面,这样我们在container的data目录下的操作就和在本地卷的操作是一样的。

CMD: 在container启动的时候运行的命令,也只能有一条存在。

创建的镜像所要作的操作是统计一个文件中的信息然后将其输入到2.txt中。利用$docker build –t count:v1 ./ 来创建镜像,并查看

在运行的时候,我们需要加上 -v /root/laipeng.han/file:/data来将本地文件/root/laipeng.han/file 挂载在container的/data下面,那么/root/laipeng.han/file下面的所有文件,在container的/data/下面全部都可以看到。

运行指令为:docker run -v /root/laipeng.han/file:/data count:v1

最终container在/data/下面输出的结果的文件2.txt,在/root/laipeng.han/file/下面也是同样可以看到的。这样我们修改/root/laipeng.han/file/下面的countfile.py代码也是可以直接运行的,不必再创建新的镜像文件。

以上代码都是亲自测试,请大家放心运行,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker 数据管理Named volume详解

    Docker数据管理:Named volume Docker中可以使用Named volume和data container来进行数据的管理. 单一Container的使用Helloworld Step 1:创建一个Named Volume 事前确认volume的信息,没有VOLUME存在 [root@host88 volumes]# docker volume ls DRIVER VOLUME NAME [root@host88 volumes]# 确认/var/lib/docker/volu

  • 利用Volume在主机和Docker容器文件传输的方法

    之前写过一篇关于Docker容器和本机之间的文件传输.的文章,但是此方法相对比较繁琐一些,在查看了官方关于数据管理的文档之后发现利用volume来实现主机和容器的文件传输效率更高一点,其实也就是将本地的目录进行挂载到容器上,官方一共有三种方法:Manage data in Docker, 这里只介绍使用volume的操作:Use volumes 1.使用Volume在主机和容器之间传输文件. 在官方文档中可以看到使用如下命令即可创建一个volume: Create a volume: $ doc

  • 详解Docker Volume 之权限管理

    Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性: 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持.Docker 1.9之后引进的named volume(命名文件卷)可以更加方便地管理数据卷的生命周期:数据卷可以被独立地创建和删除. 数据卷可以用于实现容器之间的数据共享 可以支持不同类型的数据存储实现 Docker缺省提供了对宿主机本地文件卷的支持,可以将宿主机的目录挂载到容器之中.由于没有容器分

  • 浅谈docker学习之docker数据卷(volume)

    1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们需要明确Docker内的文件系统是如何工作的.Docker镜像被存储在一系列的只读层.当我们开启一个容器,Docker读取只读镜像并添加一个读写层在顶部.如果正在运行的容器修改了现有的文件,该文件将被拷贝出底层的只读层到最顶层的读写层.在读写层中的旧版本文件隐藏于该文件之下,但并没有被不破坏 - 它仍然存在于镜像以下.当Docker的容器被删除,然后重新启动镜像时,将开启一个没有任何更改的新的容器 - 这些更改会丢失

  • 浅谈docker Dockerfile 指令 VOLUME 介绍

    在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数据就没了,除非我们人工备份下来(或者基于容器创建新的镜像).能否可以让容器进程持久化的数据保存在主机上呢?这样即使容器删除了,数据还在. 2)当我们在开发一个web应用时,开发环境是在主机本地,但运行测试环境是放在docker容器上. 这样的话,我在主机上修改文件(如html,js等)后,需要再同步

  • Docker volume使用详解及实例

    Docker volume使用 一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享.数据卷可以在多个容器之间共享. 创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然你也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,你就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行.你也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷. 如果

  • Docker中容器数据卷(Data Volume)和数据管理详解

    卷(Volume) 众所周知卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必重新构建镜像. 一.数据卷 数据卷是一个可以绕过联合文件系统的,专门指定的可在一或多个容器间共享目录.卷为提供为持久化或共享数据提供了一些有用的特性. 数据卷设计的初哀是提供持久化数据,而与容器的生命周期无关.因此,在删除容器时,Docker不会自动删除卷,直到没有容器再

  • 如何给一个正在运行的Docker容器动态添加Volume

    之前有人问我Docker容器启动之后还能否再挂载卷,考虑mnt命名空间的工作原理,我一开始认为这很难实现.不过现在我认为是它实现的. 简单来说,要想将磁盘卷挂载到正在运行的容器上,我们需要: 使用nsenter将包含这个磁盘卷的整个文件系统mount到临时挂载点上: 从我们想当作磁盘卷使用的特定文件夹中创建绑定挂载(bind mount)到这个磁盘卷的位置: umount第一步创建的临时挂载点. 注意事项 在下面的示例中,我故意包含了$符号来表示这是Shell命令行提示符,以帮助大家区分哪些是你

  • Docker数据存储之Volumes详解

    默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失.所以我们应该尽量保证容器存储层不发生写操作,为了实现数据的持久化存储我们需要选择一种方案来保存数据,当前有以下几种方式: Volumes Bind mounts tmpfs mounts 下图展示了这三种技术: Volumes Volumes(数据卷)是一个可供一个或多个容器使用的位于宿主机上特殊目录,它拥有以下特性: 数据卷可以在容器间共享和重用 对数据卷的写入操作,不会对镜像有任何影响 数据卷默认会一直存在,即使容器被

  • Docker volume 挂载卷的实现方法

    最简单的hello world输出镜像的制作是最简单的开始,但是如果我们需要修改我们的运行代码,或者有输入输出文件的时候,我们就没有办法了,每一个container运行完毕后,其分配的资源以及文件系统都会消失,那么我们就需要在本地给docker container挂载一个卷,这样在container运行的时候,container的挂载点下的文件操作,也同样会影响到给container挂载的本地卷.就像linux中的mount一样.这样我们只需要修改本地卷中的代码,而不需要修改image即可. 例

  • docker volume删除卷的操作

    prune 要使用此命令,客户端和守护程序API版本都必须至少为1.25.在客户端上使用docker version命令可以检查客户端和守护程序API版本. docker volume prune [OPTIONS] 删除未被任何容器使用的本地卷. OPTIONS 名称,简写 说明 --filter 提供过滤值. --force , -f 不提示确认信息,直接删除. rm 要使用此命令,客户端和守护程序API版本都必须至少为1.21.在客户端上使用docker version命令可以检查客户端和

  • Docker容器数据卷原理及使用方法解析

    什么是容器数据卷 如果数据都在容器中,一旦容器删除,数据就会丢失! eg : mysql容器删了,就是我们常说的删库跑路. 需求:数据可以持久化,即时删掉容器,我们的数据还在 容器直接可以有一个数据共享的技术!Docker容器产生的数据,同步到本地! 这就是卷技术!目录的挂载,将我们容器的目录挂载到linux上面! 总结:卷技术就是为了实现数据的持久化和同步操作,容器间也是可以数据共享的 使用数据卷 方式一:直接使用命令来挂载 -v # 命令 docker run -it -v 主机的目录:容器

  • docker容器数据卷之具名挂载和匿名挂载问题

    目录 什么是容器数据卷 为什么需要容器数据卷 使用 如何查看是否使用了数据卷 具名挂载和匿名挂载 指定路径挂载 具名挂载 匿名挂载 容器与容器之间的数据共享 --volumes-from 什么是容器数据卷 容器数据卷就是目录的挂载,将我们的容器的目录挂载到宿主机上,从而实现打通宿主机和容器之间的文件共享功能: 为什么需要容器数据卷 docker理念就是将应用和环境打包成一个镜像:但是数据怎么办呢?且不说数据库,一个项目在运行过程种肯定会产生大量的日志,这些日志对开发人员来说是非常重要的, 因为有

  • docker运行容器远程挂载卷的方法

    docker容器中卷的使用 创建卷,卷本身有多种方式例如下面创建的几种: 下面是官方的基本步骤: 创建一个卷: $ docker volume create my-vol 查看: $ docker volume ls local my-vol 查看卷的详情: $ docker volume inspect my-vol [ { "Driver": "local", "Labels": {}, "Mountpoint": &qu

  • Docker中数据卷(volume)管理的两种方式

    上篇文章给大家介绍过 docker基础知识之挂载本地目录的方法 ,今天给大家介绍Docker中数据卷(volume)管理的两种方式,具体内容如下所示: 什么是数据卷 数据卷( volume ):volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利. 为什么要用数据卷 Docker分层文件系统存在的问题: Docker的镜像是由一系列的只读层组合而来的,当启动一个容器时, Docker加载镜像的所有只读层,并在最上

  • Docker向数据卷Volume写入数据

    一.前言 我们知道,镜像是只读的,容器是在镜像的基础上加了一层读写层,这样容器就可以写了.既然容器可以进行写入了,那么我们就可以把一些数据放进容器里面.但是这样会有一种问题:如果容器被删除了,那么容器里面的数据也将会被删除.这该怎么解决呢?这时我们就可以使用Volume来解决这种问题. 二.volume 1.什么是volume 我们先来考虑这样一个问题:如何把源代码放进容器里面 可以在制作镜像时直接把源代码嵌入里面.(不考虑这种方式) 把源代码挂载到容器的可读写层. 那么什么是Volume呢?

  • 浅谈Docker运行Tensorboard和jupyter的方法

    网上找了很多方法都是jupyter 运行正常但不知道如何打开Tensorboard.折腾了很久,实验很多中方法最终找到了一个正确的方式. 首先创建docker volumes docker volume create --name notebooks docker volume create --name logs 注: 这个是docker创建的volume 用来供jupyter 运行的notebook 和log 保存的卷信息. 然后在本机创建两个运来实际挂载notebooks 和logs的目录

随机推荐