介绍如何在 Docker 内部以及容器之间管理数据;在容器中管理数据主要有两种方式:数据卷(Volumes)、挂载主机目录 (Bind mounts)

镜像来源

 [root@docker01 ~]# docker pull registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
[root@docker01 ~]# docker tag ed21b7a8aee9 nginx:1.17
[root@docker01 ~]# docker images | grep 'nginx'
nginx 1.17 ed21b7a8aee9 weeks ago 127MB
registry.cn-beijing.aliyuncs.com/google_registry/nginx 1.17 ed21b7a8aee9 weeks ago 127MB

数据卷【-v, --volume】

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

1、数据卷可以在容器之间共享和重用

2、对数据卷的修改会立马生效

3、对数据卷的更新,不会影响镜像

4、数据卷默认会一直存在,即使容器被删除

注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。

数据卷挂载方式1【重点,常用】

包括挂载目录和挂载文件

宿主机挂载的目录和文件
 [root@docker01 ~]# mkdir -p /data/nginx_test2  # 在宿主机创建目录,要挂载的目录
[root@docker01 ~]# cat /etc/hosts # 要挂载的文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

宿主机操作

 # /data/nginx_test2:/data_volume_test2  目录挂载  前面:宿主机目录; 后面:容器目录
# /etc/hosts:/etc/hosts 文件挂载 前面:宿主机文件; 后面:容器文件
[root@docker01 ~]# docker run -d -v /data/nginx_test2:/data_volume_test2 -v /etc/hosts:/etc/hosts --name nginx102 nginx:1.17 # 发布容器
[root@docker01 ~]# docker inspect nginx102 # 然后在 Mounts 查看信息
…………
"Mounts": [
{
"Type": "bind",
"Source": "/etc/hosts",
"Destination": "/etc/hosts",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/data/nginx_test2",
"Destination": "/data_volume_test2",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
…………
# 在宿主机的挂载目录创建文件和目录
[root@docker01 ~]# cd /data/nginx_test2/
[root@docker01 nginx_test2]# echo "aaa" > aaa
[root@docker01 nginx_test2]# mkdir abc
[root@docker01 nginx_test2]# ll
total
-rw-r--r-- root root Apr : aaa
drwxr-xr-x root root Apr : abc

容器操作

 # 进入容器
[root@docker01 ~]# docker exec -it nginx102 bash
# 查看挂载目录信息
root@8c8db5089c0e:/# ls
bin boot data_volume_test2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@8c8db5089c0e:/# cd data_volume_test2/
root@8c8db5089c0e:/data_volume_test2# ls -l
total
-rw-r--r-- root root Apr : aaa
drwxr-xr-x root root Apr : abc
# 查看挂载文件信息
root@2537d3854b42:/# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

数据卷挂载方式2【了解】

宿主机操作
 [root@docker01 ~]# docker run -d -v /data_volume --name nginx101 nginx:1.17   # 发布时,加入数据卷信息 -v /data_volume
594ea376d9301263046b13c72304af9c74a2a7516d0f3d8292f020ceba94742d
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
594ea376d930 nginx:1.17 "nginx -g 'daemon of…" seconds ago Up seconds /tcp nginx101
[root@docker01 ~]# docker inspect -f {{.Mounts}} nginx101 # 或者执行 docker inspect nginx101 然后在 Mounts 查看信息
[{volume b7bXXXX897 /var/lib/docker/volumes/b7bXXXX897/_data /data_volume local true }]
[root@docker01 ~]# cd /var/lib/docker/volumes/b7bXXXX897/_data # 进入数据卷目录
[root@docker01 _data]# echo "" > # 创建文件并写入数据
[root@docker01 _data]# mkdir aaa/bbb -p # 创建多个目录

进入容器操作

 [root@docker01 ~]# docker exec -it nginx101 bash   # 进入容器
root@594ea376d930:/# ls -l # 查看容器根目录信息
total
drwxr-xr-x root root Mar : bin
drwxr-xr-x root root Feb : boot
drwxr-xr-x root root Apr : data_volume # 存在该目录
drwxr-xr-x root root Apr : dev
…………
root@594ea376d930:/# cd data_volume/ # 进入数据卷
root@594ea376d930:/data_volume# ls -l # 可见文件和目录都在容器中存在
total
-rw-r--r-- root root Apr :
drwxr-xr-x root root Apr : aaa

查看容器的挂载信息

 root@594ea376d930:/# mount  # 查看容器挂载信息
………………
/dev/sda2 on /data_volume type xfs (rw,relatime,attr2,inode64,noquota) # 找到数据卷信息
………………

挂载主机目录【--mount】

包括挂载目录和挂载文件

宿主机挂载的目录和文件
 [root@docker01 ~]# mkdir -p /data/nginx_test3  # 在宿主机创建目录,要挂载的目录
[root@docker01 ~]# cat /etc/hosts # 要挂载的文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

宿主机操作

 [root@docker01 ~]# docker run -d --mount type=bind,source=/data/nginx_test3,target=/data_volume_test3 --mount type=bind,source=/etc/hosts,target=/etc/hosts --name nginx103 nginx:1.17   # 发布容器
[root@docker01 ~]# docker inspect nginx103 # 在Mounts可见容器的挂载信息
…………
"Mounts": [
{
"Type": "bind",
"Source": "/data/nginx_test3",
"Destination": "/data_volume_test3",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/etc/hosts",
"Destination": "/etc/hosts",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
…………
# 在宿主机的挂载目录创建文件和目录
[root@docker01 ~]# cd /data/nginx_test3/
[root@docker01 nginx_test3]# echo "" >
[root@docker01 nginx_test3]# mkdir -p /
[root@docker01 nginx_test3]# ll
total
drwxr-xr-x root root Apr :
-rw-r--r-- root root Apr :
[root@docker01 nginx_test3]# tree
.
├──
│ └──
└── directories, file

容器操作

 # 进入容器
[root@docker01 ~]# docker exec -it nginx103 bash
# 查看挂载目录信息
root@c9427fcbc26c:/# ls
bin boot data_volume_test3 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@c9427fcbc26c:/# ls -l data_volume_test3/
total
drwxr-xr-x root root Apr :
-rw-r--r-- root root Apr :
# 查看挂载文件信息
root@c9427fcbc26c:/# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

完毕!


———END———
如果觉得不错就关注下呗 (-^O^-) !

Docker数据管理与挂载管理的更多相关文章

  1. Docker入门-数据挂载

    Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很 ...

  2. docker数据卷挂载

    docker数据卷挂载笔记 我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: ...

  3. Docker Volume 之权限管理(转)

    Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性: 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持.D ...

  4. Docker背后的容器管理——Libcontainer深度解析

    Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcon ...

  5. Docker Volume 之权限管理(一)

    摘要: Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性.然而Docker数据卷的权限管理经常是非常令人困惑的.本文将结合实 ...

  6. docker之安装和管理mongodb

    前言 折腾一些使用docker来配置和管理mongodb和mongodb集群. 安装mongodb 从docker网站拉取mongodb镜像 docker search mongo # 选择一个版本 ...

  7. Docker Swarm——集群管理

    前言 之前在总结docker machine的时候,当时对docker理解还不够深入,甚至还不知道 docker machine 与 docker swarm 的区别. 在查阅资料以及官方文档之后,今 ...

  8. Docker数据管理(四)

    Docker数据管理 Docker数据分为两种: 数据卷 -v /data -v src:dst 数据卷容器 --volumes-from 数据卷 案例1:我们创建一个容器,起名叫nginx-volu ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

随机推荐

  1. Springboot整合MybatisPlus(超详细)完整教程~

    新建springboot项目 开发工具:idea2019.2,maven3 pom.xml <dependency> <groupId>org.springframework. ...

  2. [Unity2d系列教程] 002.引用外部DLL - C

    上一篇我们学习了Unity调用C#生成的外部DLL,但是有时候我们需要访问底层,不能不适用C生成的DLL.下面就让我们一起学习下,C如何生成. 1.创建一个C的控制台程序 2.点击确定->点击下 ...

  3. P1057 传球游戏 - 完美错解

    //作者:pb2 博客:https://www.luogu.com.cn/blog/pb2/ 或 http://www.cnblogs.com/p2blog//博客新闻1:"WPS开机自启, ...

  4. sqlmap中文手册

    Sqlmap中文手册  -Darren制作 零.前言 Sqlmap是十分著名的.自动化的SQL注入工具.为了较为系统地学习Sqlmap,我决定翻译一遍Sqlmap的用户手册,于是便有了此文.由于我英语 ...

  5. jchdl - GSL实例 - ComplementTwo(二的补码)

    https://mp.weixin.qq.com/s/Gh2xJJvfg1SlyuayK4LRyQ   二的补码指对二进制数的所有位数整体求补.二进制运算下0,1互为补数,n位二进制数a的补数为2^n ...

  6. 数据库之 MySQL --- 数据处理 之 多行子查询(五)

    ​ [1]需求: 谁的工资比Abel 高?方式一: 第一步线查出Abel共子 第二部进行过滤 SELECT salary FROM employees WHERE last_name = 'Abel' ...

  7. Java实现 LeetCode 415 字符串相加

    415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num ...

  8. Java实现 蓝桥杯VIP 算法提高 3-2求存款

    算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...

  9. Java实现 LeetCode 2 两数相加

    两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  10. Java实现 LeetCode_0038_CountandSay

    package javaLeetCode.primary; import java.util.Scanner; public class CountandSay_38 { public static ...