Docker之数据卷(Data Volumes)操作
目的:
前言
Docker宿主机和容器之间文件拷贝
数据卷
数据卷容器
前言
Docker 数据管理
在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行
数据共享,这必然涉及容器的数据管理操作
容器中的管理数据主要有两种方式:
数据卷 Data Volumes 容器内数据直接映射到本地主机环境 数据卷容器(Data Volume Containers 使用特定容器维护数据卷也有最原始的方法,说白了就是复制,宿主机和容器内容不交互的
Docker宿主机和容器之间文件拷贝
我们先来讲讲最原始copy方法怎么用吧:
把宿主机文件 copy 到Docker容器内
docker cp 需要拷贝的文件或者目录
我们在宿主机中ht文件夹下创建一个文件hdn.txt

在里面添加一句话,并且复制到docker容器中:

语法:docker cp 需要拷贝的文件或者目录 容器名称:容器目录
docker cp /ht/docker/ mycentos001:/javaxh/software

我们可以看内容复制过来了,因为是中文之所以乱码了。

我们在里面加一段代码:

我们在去本机上看依旧是当时输入的那句代码:

因为这两个文件是单独的个体数据不会交互,所以不推荐这个。
一般官方不推荐这种做法,虽然他也可以管理但是数据不交融,基本用不到。
数据卷
数据卷(data volume,注:位置在/var/lib/docker/volumes)是容器可以访问,但是位置不在root文件系统中的一个目录。为了能让容器之间可以共享数据,Docker让“卷”(volume)可以绕过Docker镜像的层叠机制。容器中所有对镜像的改变全部都直接存储。每个容器都有固定的运行目录在/var/lib/docker目录下;而每个容器卷的数据则默认单独存储在/var/lib/docker/volumes/目录底下。 docker run命令的-v选项能够实现容器间数据卷中数据的互相拷贝。
·数据卷相关操作:
1.创建数据卷
docker volume create my-vol

此时,数据卷默认会放到/var/lib/docker/volumes路径下,会发现所新建的数据卷位置,查看命令如下:
## 参数可以为数字“1”,字母L:大小写均可,但效果不一样
ls - /var/lib/docker/volumes

2.查看所有的数据卷
docker volume ls

3.查看指定数据卷的详细信息(显示一个JSON格式的数据)
docker volume inspect my-vol

4.删除一个volume
docker volume rm my-vol

注1:数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,
并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,
所以要及时删除
## 挂载数据卷,最好是通过run而非create/start创建启动容器
## create/start命令创建启动容器后,再挂载数据卷相当麻烦,要修改很多配置文件,但并非不可以
5.启动一个挂载数据卷的容器
demo1:
docker run -d \
-it \
--name tomcat01 \
--mount source=my-vol,target=/webapp \centos:
效果:




注意:此行命令执行后的效果是,宿主机路径/var/lib/docker/volumes/my-vol/_data与tomcat01容器路径/webapp完成映射
demo2
docker run -d \
-it \
--name tomcat02 \
--mount type=bind,source=/javaxh/data,target=/root/webapp02 \
centos:
效果:

注1:linux命令结尾加斜杠有什么用
加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车
注2:source=my-vol,target=/webapp
my-vol为要挂载的数据卷,如果数据卷不存在,docker会自动创建
/webapp为容器上目录,如果目录不存在, Docke会自动创建
注3:mount选项高级用法
--mount选项的type参数支持三种类型的数据卷
--mount标志:由多个名值对组成,逗号分隔,每个键值由 <key> = <value> 元组组成
1.type=volume普通数据卷(默认即这种类型),映射到主机/var/lib/docker/volumes路径下;
--mount type=volume,source=my-vol,target=/webapp
注:这是type的默认值
2.bind:绑定数据卷,映射到主机指定路径下:
--mount type=bind,source=/webapp,destination=/webapp2
3.tmpfs :临时数据卷,只存在于内存中
docker run -d \
-it \
--name tmptest \
--mount type=tmpfs,destination=/app \
nginx:latest
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。
数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载
数据卷容器相关操作
1.新建数据卷容器
docker run -di --name db_data -v /db_data centos:
注:-v 后面接的共享数据真实存放路径
2.用容器db1、db2测试数据卷容器是否可用
docker run -di --name db1 --volumes-from db_data centos:
docker exec -it db1 bash
cd db_data docker run -di --name db2 --volumes-from db_data centos:
docker exec -it db2 bash
cd db_data
随便在一个容器中创建一个文件kkk.txt



谢谢观看!!
Docker之数据卷(Data Volumes)操作的更多相关文章
- Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解
此文来源于:https://yq.aliyun.com/ziliao/43471 参考原文件之外,做了些修改. Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录 ...
- docker数据卷(Data Volumes)
Docker宿主机和容器之间文件拷贝docker copy 前言: Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及 ...
- 数据卷(Data Volumes)
Docker宿主机和容器之间文件拷贝docker copy 前言: Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及 ...
- Docker 容器数据卷(Data Volume)与数据管理
卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必 ...
- docker数据卷之持久化操作
docker Docker三大核心组件:(运行起来的镜像就可以称作容器) Docker 镜像--Dcoker images:类比与类 Docker 仓库--Docker registeries: Do ...
- docker基础---数据卷volumes
1.数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 卷会一直存在 ...
- Docker数据管理(数据卷&数据卷容器)
生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷(Data Volumes):容 ...
- Docker容器数据卷-Volume详解
Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume).数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享.数据 ...
- Docker学习笔记 - Docker的数据卷
一.什么是数据卷? 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数据 ...
随机推荐
- GitHub上如何创建文件夹
看了网上很多关于如何在git上创建空文件夹的文章后,发现大家写的都是用指令在本地创建一个空文件夹后再上传指令和步骤都太繁琐且复杂了,对于用git不是很熟练得到人来说太麻烦了,而且在本地于github上 ...
- ssh 可以登录但是 sftp 不能登录的解决办法
将 /etc/ssh/sshd_config 中的 Subsystem sftp /usr/libexec/openssh/sftp-server 改为 Subsystem ...
- OpenFOAM——不对称突变管道中的低雷诺数流动
本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL064: Low Reynolds Number Flow in a Channe ...
- 用Python画一颗特别的心送给她
import numpy as np import matplotlib.pyplot as plt x_coords = np.linspace(-100, 100, 500) y_coords = ...
- TypeScript in 5 minutes
https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html Let’s get started by build ...
- windows获取管理员权限 操作文件
1.文件右键属性 2.安全tab 一路 “应用”和“确定”
- [python]pypy优化python性能
下载地址:https://pypy.org/download.html # python2.7版本 yum install pypy # python3.6版本https://bitbucket.or ...
- 自己写的一个 CGBLIB 动态代理【原创】
CGLIB代理类,用CGLIB来实现一个代理类.大致原理描述如下: 1.使用Enhancer类来生成一个继续于被代理类的子类,此子类会重写被代理类(父类)中所有的非final的public方法: 2. ...
- Windows通过URL启动本机App
Windows通过URL启动本机App http://xxx.itdhz.com/?file=001-Windows/100-Windows通过URL启动本机App
- 蓝牙BLE: ATT和GATT的概念
BLE通信由两种设备类型构成—— Client和Server. Server提供数据服务,所以一般来说设备是Server,手机是Client.Server和Client通过ATT PDU进行交互,Se ...