介绍如何在 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. zookeeper安装部署步骤

    安装步骤 本安装教程,采用zookeeper 3.6.1 装java 下载zk包,分发到各个机器 确定或创建一个zookeeper的数据存放路径,并在该路径下创建一个myid文件,其中设置当前zook ...

  2. sql语句中的删除操作

    drop: drop table tb; 删除内容和定义,释放空间.简单来说就是把整个表去掉.以后不能再新增数据,除非新增一个表. truncate: truncate table tb; 删除内容. ...

  3. Java——枚举类(疯狂Java讲义6.9)

    枚举类:有限而固定的类,使用enum关键字定义. 一个Java源文件中最多只能定义一个public访问权限的枚举类. 1.可实现一个或多个接口,默认集成了java.lang.Enum类(实现java. ...

  4. 关于oauth安全

    白话认证流程 A)用户打开客户端以后,客户端要求用户给予授权.(比如说你登陆淘宝,通过QQ这个第三方来登录时,这个时候淘宝将你引导至QQ的认证服务器) B)用户同意给客户端授权.(这个时候在你手机上弹 ...

  5. Rocket - util - Timer

    https://mp.weixin.qq.com/s/Z4JJhZ_jL1lqF1nf_orq9A   简单介绍Timer的实现.   ​​   1. 基本功能   实现定时器的功能.   2. Ti ...

  6. 快速搭建基于Spring Boot + Spring Security 环境

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.Spring Security 权限管理框架介绍 简介: Spring Security 提供了基于 ...

  7. MyBatis(一) 概述与SQL定制、对象映射

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.MyBatis概述 1.mybatis简介 MyBatis 是支持定制化 SQL.存储过程以及高级映 ...

  8. 使用turtle库画太极图

    from turtle import * pensize(3) penup() pencolor("black") reset() speed(10) pendown() circ ...

  9. Java实现 LeetCode 725 分隔链表(暴力)

    725. 分隔链表 给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分. 每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 nu ...

  10. Java实现 LeetCode 222 完全二叉树的节点个数

    222. 完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集 ...