https://gitee.com/fakerlove/docker

文章目录

  • 4. 数据卷技术
    • 4.1 使用 -v 命令挂载目录:
    • 4.2 实战:MySQL同步数据
    • 4.3 具名和匿名挂载
      • 匿名
      • 具名
      • 拓展

4. 数据卷技术

Docker04_使用数据卷技术实现容器内外和容器间的数据共享

4.1 使用 -v 命令挂载目录:

[root@izbp10tup89om84qulgxbsz home]# docker run -it -v /home/ceshi:/home centos /bin/bash

此时,容器内的 /home 目录就与主机的 /home/ceshi 目录实现了双向绑定。
即使容器被关闭或删除了,数据依然可以保留。

使用 docker inspect 容器id 命令可以查看到详细的目录挂载信息:

"Mounts": [{"Type": "bind","Source": "/home/ceshi","Destination": "/home","Mode": "","RW": true,"Propagation": "rprivate"}
]

4.2 实战:MySQL同步数据

#搜索镜像
[root@izbp10tup89om84qulgxbsz ceshi]# docker search mysql#下载镜像
[root@izbp10tup89om84qulgxbsz ceshi]# docker pull mysql:5.7# 查看是否下载成功
[root@izbp10tup89om84qulgxbsz ceshi]# docker images# 启动 mysql 镜像
-d 表示后台运行
-p 表示端口映射
-v 数据卷挂载
-e 环境配置
--name 容器名
[root@izbp10tup89om84qulgxbsz ceshi]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

Navicat 测试连接:

使用 Navicat 创建一个 test-blu 数据库:

进入主机的 /home/mysql/data 目录查看文件,发现多了一个名为 test@002dblu 的目录:

[root@izbp10tup89om84qulgxbsz data]# ls
auto.cnf         client-key.pem  ib_logfile1         private_key.pem  sys
ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem   test@002dblu
ca.pem           ibdata1         mysql               server-cert.pem
client-cert.pem  ib_logfile0     performance_schema  server-key.pem
12345
# 删除 mysql01 容器
[root@izbp10tup89om84qulgxbsz data]# docker rm -f mysql01# 查看是否删除成功
[root@izbp10tup89om84qulgxbsz data]# docker ps -a# 查看主机的 /home/mysql/data 目录,发现文件仍然存在
[root@izbp10tup89om84qulgxbsz data]# ls
auto.cnf         client-key.pem  ib_logfile1         private_key.pem  sys
ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem   test@002dblu
ca.pem           ibdata1         mysql               server-cert.pem
client-cert.pem  ib_logfile0     performance_schema  server-key.pem

具名挂载 和 匿名挂载

指定路径挂载       -v 主机目录:容器目录
具名挂载            -v 卷名:容器目录
匿名挂载            -v 容器目录

匿名挂载 nginx 示例(不推荐):

# 匿名挂载启动 nginx
-P 表示随机端口映射
[root@izbp10tup89om84qulgxbsz home]# docker run -d -P --name nginx01 -v /etc/nginx nginx# 查看所有的 volume
[root@izbp10tup89om84qulgxbsz home]# docker volume ls
DRIVER              VOLUME NAME
local               f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b
local               fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65# 查看指定的 volume 信息
[root@izbp10tup89om84qulgxbsz home]# docker volume inspect f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b
[{"CreatedAt": "2020-11-11T21:36:18+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b/_data","Name": "f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b","Options": null,"Scope": "local"}
]
[root@izbp10tup89om84qulgxbsz home]# docker volume inspect fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65
[{"CreatedAt": "2020-11-18T18:27:24+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65/_data","Name": "fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65","Options": null,"Scope": "local"}
]

结论:所有 docker 容器内的卷,在没有指定主机目录的情况下,默认挂载的地址都是:
"/var/lib/docker/volumes/【volumn-name】/_data"
问题是匿名挂载的 volumn 的 名字都是一长串的随机字符,我们无法判断哪一个才是 nginx 容器挂载的地址,使用具名挂载可以解决这个问题。

具名挂载 nginx 示例(推荐):

# 具名挂载启动 nginx
[root@izbp10tup89om84qulgxbsz home]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx# 查看所有的 volume
[root@izbp10tup89om84qulgxbsz _data]# docker volume ls
DRIVER              VOLUME NAME
local               f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b
local               fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65
local               juming-nginx# 查看指定的 volume 信息
[root@izbp10tup89om84qulgxbsz _data]# docker volume inspect juming-nginx
[{"CreatedAt": "2020-11-18T18:46:47+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data","Name": "juming-nginx","Options": null,"Scope": "local"}
]# 进入挂载目录查看文件,找到了 nginx 的配置文件!
[root@izbp10tup89om84qulgxbsz _data]# cd /var/lib/docker/volumes/juming-nginx/_data[root@izbp10tup89om84qulgxbsz _data]# ll
total 40
drwxr-xr-x 2 root root 4096 Nov 18 18:46 conf.d
-rw-r--r-- 1 root root 1007 Oct 27 23:09 fastcgi_params
-rw-r--r-- 1 root root 2837 Oct 27 23:09 koi-utf
-rw-r--r-- 1 root root 2223 Oct 27 23:09 koi-win
-rw-r--r-- 1 root root 5231 Oct 27 23:09 mime.types
lrwxrwxrwx 1 root root   22 Oct 27 23:25 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root  643 Oct 27 23:25 nginx.conf
-rw-r--r-- 1 root root  636 Oct 27 23:09 scgi_params
-rw-r--r-- 1 root root  664 Oct 27 23:09 uwsgi_params
-rw-r--r-- 1 root root 3610 Oct 27 23:09 win-utf

拓展:

默认rw挂载的目录可读可写,可以在容器内部对挂载的目录内的文件进行读写:
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx:rw设置读写权限为ro(readOnly)的挂载目录,不可以在容器内对该目录内的文件进行写操作:
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx:ro

4.3 具名和匿名挂载

匿名

docker run -d -P --name naginx-1 -v /ect/nagix nginx

不写路径,然后docker 自动生成路径进行挂载

具名

docker run -d -P --name nagix02 -v nagix_1:/ect/nagix nagix

写路径的,但是路径并不是绝对路径,而是卷名

查看卷名

docker volume inspect

拓展

docker run -d -P --name nagix02 -v nagix_1:/ect/nagix:ro nagix

ro readonly 只读,只能进行宿主机来改变

docker run -d -P --name nagix02 -v nagix_1:/ect/nagix:rw nagix

rw readwrite 可读可写

docker_4 数据卷技术相关推荐

  1. docker commit镜像以及数据卷技术

    commit镜像 docker commit 提交容器成为一个新的副本# 命令和git类似 docker commit -m='提交的描述信息' -a='作者' 容器id 目标镜像名:[tag] 实战 ...

  2. 容器数据卷网络基本配置

    容器和主机.容器与容器之间需要数据共享时可以使用数据卷技术解决 容器中管理数据的主要方式有两种:数据卷.数据卷容器 1 数据卷 1.1 数据卷特性 可在容器之间共享和重用 对数据卷的修改马上生效 对数 ...

  3. Docker容器数据卷讲解

    概述 为什么Docker需要容器数据卷技术:如果没有数据卷技术,比如一个由mysql镜像创建运行的容器,产生的数据就会保存在容器中,数据的生命周期与容器的生命周期一致,如果删除了该容器,相应的数据也会 ...

  4. Docker容器的数据卷(volumes)

    目录 1.容器数据卷技术解决什么问题 docker可将应用和环境打包成一个镜像.容器是镜像的实例化. 我们的数据如果都在容器中,一旦容器删除,数据就会丢失. 数据卷技术可将容器产生的数据同步到本地,容 ...

  5. docker的文件流处理_Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken...

    前言 前面已经写了两篇关于docker的博文了,在工作中有关docker的基本操作已经基本讲解完了.相信现在大家已经能够熟练配置docker以及使用docker来创建镜像以及容器了.本篇博客将会讲解如 ...

  6. mysql挂载数据卷_docker卷挂载技术

    卷技术,容器内部数据映射到宿主机上 一.直接使用命令来挂载 docker run -it -v /home/test:/home centos /bin/bash# 在主机上查看 docker运行容器 ...

  7. 容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件

    容器虚拟化技术Docker(一)简介.安装.常见命令.数据卷.安装常规软件 1.Docker简介 1.简介 Docker的主要目标是"Build,Ship and Run Any App,A ...

  8. 网络数据面技术是如何内卷起来的

    Unix/Linux内核协议栈的衰微,以及每年大量的行业工人输入,造成了网络数据面技术的内卷. 我经常和人一起讨论网络技术,各式各样的,也不仅限于技术,偶尔也吐槽下内卷,周末了总结下我的观点. 早在2 ...

  9. Docker容器技术 |镜像原理 |数据卷 |数据卷容器

    文章目录 一.Docker镜像介绍 二.镜像的commit操作补充 三.Docker数据卷 数据卷的理念:持久化+数据共享 方式1:直接添加数据卷 方式2:使用DockerFile添加数据卷 四.Do ...

最新文章

  1. 李彦宏/王坚/王传福等上榜“中国工程院2019院士增选候选人”引争议,实至名归吗?...
  2. 适合于小团队产品迭代的APP测试流程
  3. Apache Shiro 使用手册(四)Realm 实现
  4. c++运算符重载中很多人易忘的小细节
  5. leetcode最大矩形 (动态规划 python)
  6. 谷歌guava_Google Guava –期货
  7. 使用MongoDB进行乐观锁定重试
  8. 【kubernetes系列之安装Dashboard】
  9. 刚来公司时我却做了一件最傻的事
  10. 无锁并发框架Disruptor学习入门
  11. Tomcat部分目录作用
  12. 华科计算机学院硕士武汉理工推免,武汉理工大学2021届保研率14.9%,主要保研本校、武大、华科...
  13. 我的第一个Python爬虫——谈心得
  14. 代价敏感学习初探 - 有偏损失函数设计
  15. ckeditor富文本解决文段首行缩进问题
  16. win7 iis php mysql_windows7和iis配置的php phpinfo()中没有mysql组件
  17. BODIPY493/503-alkyne/amine/azide/carboxylic acid/DBCO/hydrazide/maleimide/NHS /tetrazine氟化硼二吡咯衍生物
  18. CSDN2018博客之星评选——期待各位大佬的投票!哈哈
  19. HTML5表单:工具箱中的可靠工具
  20. 2022年劳务员-通用基础(劳务员)考试模拟100题及在线模拟考试

热门文章

  1. Docker容器kali镜像导出/导入
  2. Android 5.1长按电源键添加重启功能
  3. mediacodec编解码少帧问题
  4. python炒股日记_Python日记
  5. 如何选择云服务器与轻量应用服务器?谈谈自己的看法
  6. angelajs中ajax,Fabric.js Triangle angle属性用法及代码示例
  7. esp8266 米家_【保姆级教程】米家全屋智能家居避坑指南+新手必购单品推荐(2020版)_智能家居...
  8. MyBatis学习笔记01
  9. python百分号字符串_python--003--百分号字符串拼接、format
  10. 仿真软件测试基尔霍夫定律,基尔霍夫定律实验报告范文