Docker使用Volume来管理宿主机和容器内数据的映射 

什么是数据卷(Volume)
Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件,该文件将会被拷贝出底层的只读层,放到最顶层的读写层中。读写层中原来的旧版本文件(未被更改过的文件)仍然存在于镜像中。

所以当Docker容器被删除后,再基于原来的镜像创建容器时,将创建一个没有任何数据更改的容器,在之前那个容器中的数据更改会丢失掉。只读层和读写层的组合被Docker称为联合文件系统(Union File System)。

为了能够持久化这些更改过的数据,并且能够很容易实现容器间共享数据,Docker提出了Volume的概念。Volume是外部默认的联合文件系统或者是存在于宿主文件系统中正常的文件或文件夹。

为什么需要数据卷(Volume)
这得从Docker容器的文件系统说起。出于效率等一系列原因,Docker容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:

不能在宿主机上很方便地访问容器中的文件。
无法在多个容器之间共享数据。
当容器删除时,容器中产生的数据将会丢失。
为了解决这些问题,Docker引入了数据卷(Volume) 机制。数据卷以独立于Docker文件系统的形式存在于宿主机中。数据卷的最大特点是:其生存周期独立于容器的生存周期。

数据卷的设计目的就是数据的持久化,因为其生存周期独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。所以数据卷可以带来以下好处:

数据卷可在容器之间共享或重用数据。
数据卷的更改可以直接生效。
数据卷的生命周期一直持续到没有容器使用它为止。
对数据卷操作不会影响到镜像本身。
数据卷可以完成容器到宿主机、宿主机到容器以及容器到容器之间的数据共享。

前言

有人会和我一样么?我并没有系统的学习过容器化技术,约在两年前进了一家公司是做MES的在经过某知名造车新势力成功搭建.NET CORE3.1实现的系统架构并用K8S方式部署。然后就开始在没人带的情况下花点时间实践了云原生技能,学习了该公司的系统架构成了配置开发人员。我本来就是野生程序员,所以学习云原生就是边走边学。我刚开始并不明白上面的概念,不了解VOLUME有什么作用。直到我最近在学ODOO二开,需要频繁更新容器里的文件。豁然发现使用VOLUME就好了。写下这篇随笔纯粹打发时间。

正文-Volume命令

 --odoo
docker run -d -v odoo-lib:/var/lib/odoo -v odoo-config:/etc/odoo -v odoo_extra:/mnt/extra-addons -v odoo_apps:/usr/lib/python3/dist-packages/odoo/addons -p 8069:8069 --name odoo --restart=always --link db:db -t odoo:17
docker run -d -v odoo-db:/var/lib/postgresql/data -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres -p 5432:5432 --restart=always --name db postgres:15.7--redis
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v redis_conf:/etc/redis/redis.conf -v redis_data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass dba#redis
--nginx
docker run \
-p 8080:80 \
--name nginx \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx:latest

每次docker方式部署mysql,redis,nginx等支持docker方式部署的应用我都要抄人家文章里的bash命名行。然后收藏夹里很多地址是关于这些的。其实我知道这些bash命令里很多是关于docker volumn的,但是就是不想花时间去详细了解。终于我想通了我要知其所以然。

docker volume help

Usage: docker volume COMMAND

Manage volumes

Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes Run 'docker volume COMMAND --help' for more information on a command.

通过docker volume COMMAND --help可以查看每个Volume命令的详情。

docker volume ls
列出所有的数据卷。

[root@izoq008ryseuupz docker]# docker volume ls --help

Usage: docker volume ls [OPTIONS]

List volumes

Aliases:
ls, list Options:
-f, --filter filter Provide filter values (e.g. 'dangling=true')
--format string Pretty-print volumes using a Go template
-q, --quiet Only display volume names

docker volume create

创建一个数据卷。

[root@izoq008ryseuupz docker]# docker volume create --help

Usage: docker volume create [OPTIONS] [VOLUME]

Create a volume

Options:
-d, --driver string Specify volume driver name (default "local")
--label list Set metadata for a volume
-o, --opt map Set driver specific options (default map[])

是的,上面的内容是抄别人的。为了要让可读性稍微有点保障。其实我基本上只用 docker run的时候带-v参数来自动创建volumn。自动创建的卷在宿主机器上的实际地址在哪里呢?你可以使用portainer这个可视化容器管理工具来管理。

你可能不知道哪些路径需要映射,-v是不限制个数的少了就自己加上。容器内部的地址自己使用docker exec进入容器内部去验证。portainer是非常简单易用的。是我必须在服务器上安装的工具。所以我其实是不喜欢用bash命令的。

白话理解和使用DOCKER VOLUME的更多相关文章

  1. 什么是Docker Volume?

    摘要:Docker Volume,通常翻译为数据卷,用于保存持久化数据.当我们将数据库例如MySQL运行在Docker容器中时,一般将数据通过Docker Volume保存在主机上,这样即使删除MyS ...

  2. 理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  3. 用一个实际例子理解Docker volume工作原理

    要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读 ...

  4. 深入理解Docker Volume(一)

    想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载镜像层并在其上添 ...

  5. 利用Docker volume修改Nginx Docker镜像里index.html

    通过这个小例子我们可以进一步加深对Docker volume概念的理解和使用方法. 我们都知道运行基于Docker的Nginx镜像后,访问localhost能看到Nginx默认的首页,这个首页的位置是 ...

  6. Docker - 命令 - docker volume

    概述 docker volume 命令 背景 docker 容器的存储, 通常需要独立于镜像 docker volume 就是负责这块的命令 1. 写在 docker volume 之前 概述 doc ...

  7. mysql颠覆实战笔记(七)--白话理解事务

    今天我们学习web开发级mysql颠覆实战课程第9课没MYSQL事务(一):白话理解事务.前面有两节课第7讲:商品系统设计(四):商品属性设计之自定义属性,第8讲:商品系统设计(五):一维属性的商品价 ...

  8. rexray在CentOS上不能创建ceph rbd的docker volume问题定位

    背景 我们通过docker的rexray插件来创建ceph rbd设备的docker volume,但总提示创建失败. # docker volume create --driver=rexray - ...

  9. docker volume创建、备份、nfs存储

    docker存储volume #环境 centos7.4 , Docker version 17.12.0-ce docker volume创建.备份.nfs存储 #docker volume 数据存 ...

  10. (白话理解)CAS机制

    (白话理解)CAS机制 通过一段对话我们来了解cas用意 示例程序:启动两个线程,每个线程中让静态变量count循环累加100次. 最终输出的count结果是什么呢?一定会是200吗? 加了同步锁之后 ...

随机推荐

  1. 力扣206(java&python)-反转链表(简单)

    题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例2: 输入:head = [1,2] ...

  2. Java 应用压测性能问题定位经验分享

    简介: 问题千千万,但只要修练了足够深厚的内功,形成一套属于自己的排查问题思路和打法,再加上一套支撑问题排查的工具,凭借已有的经验还有偶发到来的那一丝丝灵感,相信所有的问题都会迎刃而解. 作者:凡勇 ...

  3. 【深度学习】基于 Alluxio 数据缓存的性能优化

    作者 | 车漾(阿里云高级技术专家).顾荣(南京大学 副研究员) 导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7 年的不断开发迭代,支撑大数据处理场景的数 ...

  4. 更便捷:阿里云DCDN离线日志转存全新升级

    简介: 1月6日,阿里云CDN年度产品升级发布会中,阿里云CDN产品专家邓建伟宣布DCDN离线日志转存全新升级,并对离线日志转存方案的价值.应用及使用进行了详细解读. 在日常CDN加速服务过程中会产生 ...

  5. 高效使用Java构建工具|Maven篇|云效工程师指北

    ​简介:高效使用Java构建工具|Maven篇.众所周知,当前最主流的Java构建工具为Maven/Gradle/Bazel,针对每一个工具,我将分别从日常工作中常见的场景问题切入,例如依赖管理.构建 ...

  6. Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

    简介: 本文将介绍如何将 MySQL 中的数据,通过 Binlog + Canal 的形式导入到 Kafka 中,继而被 Flink 消费的案例. 一. 背景介绍 本文将介绍如何将 MySQL 中的数 ...

  7. [FAQ] 适用于 macOS / Arm64 (M1/M2) 的 VisualBox

      使用与 Windows.Linux.macOS 的x86架构的一般在下面地址中下载: Download VisualBox:https://www.virtualbox.org/wiki/Down ...

  8. [FAQ] 夏玉米 按规则查询域名靠谱吗 ?

    很早就有一个网站叫 夏玉米,可以按规则查询和注册域名,那么它真如我们想的那样 可以找到好域名吗? 虽然看起来很好用,实际上夏玉米的查询只是针对它自己的数据库,不包含未在其平台注册的域名,所以大家要失望 ...

  9. 【转载】只有.dbf数据文件进行数据库恢复

    此篇文章为转载,来自 " ITPUB博客 " ,链接:http://blog.itpub.net/26015009/viewspace-714742/ 个人mark下,在之后dbf ...

  10. Gparted扩展硬盘空间

    需求:有一些磁盘占满了空间,例如/亦或者/opt目录等.可以通过Gparted扩展空间. 1.vmware添加ISO [添加光盘]gparted-live-cd添加至ISO 2.延迟引导启动,强制进入 ...