docker07-数据存储
Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:
数据卷(Volumes)
挂载主机目录 (Bind mounts)
数据卷
是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:数据卷
可以在容器之间共享和重用对
数据卷
的修改会立马生效对
数据卷
的更新,不会影响镜像数据卷
默认会一直存在,即使容器被删除
注意:
数据卷
的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。创建一个数据卷Volumes
#创建
[root@node1 ~]# docker volume create my-vol
my-vol
#查看
[root@node1 ~]# docker volume ls
DRIVER VOLUME NAME
local my-vol
#详细查看
[root@node1 ~]# docker volume inspect my-vol
[
{
"CreatedAt": "2021-02-17T10:54:32+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]启动一个挂载数据卷的容器
[root@node1 ~]# docker run -itd --name web -v my-vol:/usr/share/nginx/html nginx:latest
b87a20e4630fa1c1dda606a757ab27cd7d1708057610094a75ff4771dc8db6c0查看web容器的详细信息
[root@node1 ~]# docker inspect web
......
#找到mount字段
"Mounts": [
{
"Type": "volume",
"Name": "my-vol",
"Source": "/var/lib/docker/volumes/my-vol/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],删除数据卷
[root@node1 ~]# docker volume rm my-vol
数据卷
是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除数据卷
,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷
。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用docker rm -v
这个命令。无主的数据卷可能会占据很多空间,要清理请使用以下命令
$ docker volume prune
挂载一个主机目录作为数据卷Bind mounts
使用 一个本地主机的目录挂载到容器中去。
[root@node1 ~]# docker run -itd -P -v /html:/usr/share/nginx/html nginx:latest
1e691d2c4a72ef328d134e3448a9f59f5abf9150dfc7c08d8c15423922e32aa0上面的命令加载主机的
/html
目录到容器的/usr/share/nginx/html
目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,以前使用-v
参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,现在使用--mount
参数时如果本地目录不存在,Docker 会报错。Docker 挂载主机目录的默认权限是
读写
,用户也可以通过增加readonly
指定为只读
。[root@node1 ~]# docker run -itd -P -v /html:/usr/share/nginx/html:ro nginx:latest
d646bf5df9f33ca50c7ab5e36ae59ca9a84cc13980a60162184806adc255eec2
#在宿主机目录创建文件没有问题
[root@node1 ~]# touch /html/index.html
[root@node1 ~]# docker exec -it d646bf sh
# cd /usr/share/nginx/html
# touch index.html
touch: cannot touch 'index.html': Read-only file system
触摸:不能触摸索引。只读文件系统查看数据卷的具体信息
[root@node1 ~]# docker inspect d646bf
"Mounts": [
{
"Type": "bind",
"Source": "/html",
"Destination": "/usr/share/nginx/html",
"Mode": "ro",
"RW": false,
"Propagation": "rprivate"
}
]
容器的跨主机网络共享
通过nfsserver实现,管理2台nginx容器
IP 服务 192.168.1.1 nginx容器w1
192.168.1.2 nginx容器w2 192.168.1.4 nfs-server 1、搭建nfs
yum -y install nfs-utils
mkdir /html
vim /etc/exports
cat /etc/exports
#/html *(rw,sync,no_root_squash)
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
echo hello > /html/index.html2、docker01
[root@node1 ~]# mkdir /www
[root@node1 ~]# showmount -e 192.168.1.4
Export list for 192.168.1.4:
/html *
[root@node1 ~]# mount -t nfs 192.168.1.4:/html /www
root@node1 ~]# ls /www/
index.html[root@node1 ~]# cat /www/index.html
hello[root@node1 ~]# docker run -itd --name w1 -p 666:80 -v /www:/usr/share/nginx/html nginx:latest
1c247e5147486ecd6f25feb623de727fdc1c54ddcf452e1bdd99f772381546d5访问测试:
[root@node1 ~]# curl 192.168.1.1:666
hello3、docker02
[root@node2 ~]# mkdir /www
[root@node2 ~]# showmount -e 192.168.1.4
Export list for 192.168.1.4:
/html *
[root@node2 ~]# mount -t nfs 192.168.1.4:/html /www
[root@node2 ~]# cat /www/index.html
hello
[root@node2 ~]# docker run -itd --name w2 -p 666:80 -v /www:/usr/share/nginx/html nginx:latest
88fcd09b2ce93ef9085466a0ffb3f69fac66272bc0b4b39dec6a7886aa033f83
访问测试
[root@node2 ~]# curl 192.168.1.2:666
hello4、修改nfs挂载文件,实现nginx容器网页同步
[root@nfs-server html]# cat index.html
hello
[root@nfs-server html]# echo 404 > index.html
[root@nfs-server html]# cat index.html
404
————————————————————————————————————-
[root@node1 ~]# curl 192.168.1.1:666
404
[root@node2 ~]# curl 192.168.1.2:666
404
docker07-数据存储的更多相关文章
- Kooboo CMS技术文档之三:切换数据存储方式
切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...
- Android之数据存储的五种方法
1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...
- Android之网络数据存储
一.网络保存数据介绍 可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中. 用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法. 本文利用LeanCloud ...
- Android之文件数据存储
一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...
- Android之SharedPreferences数据存储
一.SharedPreferences保存数据介绍 如果有想要保存的相对较小键值集合,应使用SharedPreferences API.SharedPreferences对象指向包含键值对的文件并提供 ...
- Atitit 数据存储视图的最佳实际best practice attilax总结
Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论 本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...
- Android数据存储之SQLCipher数据库加密
前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...
- Android数据存储之GreenDao 3.0 详解
前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...
- Vertica增加一个数据存储的目录
Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...
- 安卓android sharepreference数据存储,保存输入框里面的数据
Fragment 里面 使用轻量级的数据存储sharepreference ,代码思路清晰.保存输入框里面的数据,实现按钮保存. 个人项目中简单清晰代码: 赵存档 编写 ,可以参考: 类继承Fragm ...
随机推荐
- 【UNIAPP】接入导航系统完整版
// 查询附近/搜索关键词 <template> <view> <!--地图容器--> <map id="myMap" :markers= ...
- Trove自动钓鱼脚本(国际服
#WinActivateForce ; Script config. Do NOT change value here, might working inproperly! global Versio ...
- 为什么 Go 模块在下游服务抖动恢复后,CPU 占用无法恢复
为什么 Go 模块在下游服务抖动恢复后,CPU 占用无法恢复 https://xargin.com/cpu-idle-cannot-recover-after-peak-load/ 极端情况下收缩 G ...
- 阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性公网IP是独立的公网IP资源,可以绑定到阿里云专有网络VPC类型的ECS、NAT网关、私网负载均衡SLB上,并可以动态解绑,实现公网IP和ECS、NAT网关、SLB的解耦,满足灵活管理的要求。阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性络VPC类型的E
阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性公网IP是独立的公网关.私网负载均衡SLB上,并可以动态解绑,实现公网IP和ECS.NAT网关.SLB的解耦,满足灵活管理的要求.
- centos7+python3+selenium+chrome
一.安装GUI图形化界面 (1)安装GUI图形化界面 yum groupinstall "GNOME Desktop" "Graphical Administration ...
- NOIP2020 移球游戏
Description 给定 \(n+1\) 个栈,前 \(n\) 个栈内有不定的 \(m\) 个元素,最后一个栈为空,每个栈的最大容量为 \(m\) 每种颜色都有 \(m\) 种,求任意一种方法,使 ...
- Mysql数据库版本高低引起的group by问题
低版本的Mysql,group by限制性比较小,在进行group by时,select的对象可包含多个,但是换成高版本5.6以上好像,使用group by 以后,select的对象必须也已经被聚合, ...
- Linux系统磁盘管理(lvm逻辑卷管理)
linux系统用户常遇到的一个问题就是如何精准的评估分区的大小,已分配合适的磁盘空间:普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文 ...
- 3. Linux常用系统状态检测命令
1.ifconfig :于获取网卡配置与网络状态等信息,如网卡名称.IP.MAC等 2.uname -a :完整地查看当前系统的内核名称.主机名.内核发行版本.节点名.系统时间.硬件名称.硬件平台.处 ...
- File类以及IO流
1.File类 package LESSON12; import java.io.File; import java.io.IOException; import java.text.SimpleDa ...