docker 容器数据卷管理

容器里面写入的数据,一般情况下会随着容器的删除而删除,怎么才能让容器里面的数据永久保留呢

将容器的目录与宿主机的目录进行绑定(手动指定),容器删除,数据依旧存在

2种使用数据卷的方式
第一种、在命令里面-v指定
docker run -dit --name=web --restart=always -v 宿主机文件目录:容器目录 镜像名
docker run -dit --name=web --restart=always -v /data nsinx #只指定一个目录,这个是只容器的目录
在这里插入图片描述
查看属性:docker inspect web
里面的mounts参数
在这里插入图片描述
docker run -dit --name=web --restart=always -v /xx:/data nginx #将宿主机/xx目录与容器的/data捆绑
在这里插入图片描述
查看属性docker inspect web
在这里插入图片描述在捆绑目录的同时指定权限,默认是rw权限,只能限制容器中的权限,不针对宿主机
docker run -dit --name=web --restart=always -v /xx:/data:rw nginx #在容器中/data目录具有读写权限
docker run -dit --name=web --restart=always -v /xx:/data:ro nginx #在容器中/data目录具有只读权限,宿主机还是具有读写权限
在这里插入图片描述
在这里插入图片描述

第二种、先把数据卷创建出来,再绑定
docker volume list #列出所有的卷
docker volume create +卷名 #创建卷
docker volume create v1 #创建名为v1的卷
在这里插入图片描述
docker volume inspect +卷名 #查看卷的属性
docker volume inspect v1 #查看v1卷的属性
在这里插入图片描述
docker run -dit --name=web --restart=always -v 卷名:容器目录 +镜像名
docker run -dit --name=web --restart=always -v v1:/data nginx #启动一个容器,将容器中的data目录与v1卷进行绑定,而如上图v1卷又是根/var/lib/docker/volumes/v1/_data绑定的,所以容器data目录就间歇与/var/lib/docker/volumes/v1/_data绑定了
在这里插入图片描述
查看容器属性
在这里插入图片描述
docker volume create +卷名创建的卷会默认与宿主机上面的路径做绑定,默认路径/var/lib/docker/volumes/,这个路是可以更改的,更改卷默认的挂载路径《一般情况下保持默认
在这里插入图片描述
vim /etc/docker/daemon.json
在这里插入图片描述
systemctl daemon-reload;systemctl restart docker #更改环境变量,重启服务
在这里插入图片描述
docker volume create v2 #创建卷V2
docker volume inspect v2 #查看卷v2的属性,可以看到他的存储卷已经变了
在这里插入图片描述
问题:做数据卷的意义是什么?
容器的哪个目录与宿主机进行绑定,这个是由容器运行的程序决定的
应用程序使用哪个目录:例如
mysql–/var/lib/mysql
apache–/var/www/html
nginx–/usr/share/nginx

例:
创建一个mysql容器
docker run -dit --name=db --restart=always -v /db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=haha001 hub.c.163.com/library/mysql
在这里插入图片描述
在这里插入图片描述
登录到数据库里面
mysql -uroot -phaha001 -h172.17.0.2
在这里插入图片描述
创建一个表aa;
在这里插入图片描述
再数据库中多添加一些字段,则都会保持再宿主机的/db下面
在这里插入图片描述
当容器删除时,重新执行拉取容器命令docker run -dit --name=db --restart=always -v /db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=haha001 hub.c.163.com/library/mysql 数据保持不变,当第二次拉取容器时,假如将第二次的容器密码变了,登录依然还是用第一次的密码登录,比如第二此拉取的密码是haha002,登录还是用的第一次的密码haha001

容器mysql密码忘记了怎么办,容器mysql破密,重置mysql密码
先将mysql容器的配置文件拷贝的本地宿主机上面
在这里插入图片描述
编辑拷贝的docker.conf文件,新增参数skip-grant-tables
在这里插入图片描述在这里插入图片描述

将更改好的docker.cnf文件再次拷贝到容器中
在这里插入图片描述
重启mysql容器
systemctl restart db
在这里插入图片描述
重启完成后进入容器,并输入mysql进入数据库,以安全方式进入mysql
在这里插入图片描述
更改密码
在这里插入图片描述
在这里插入图片描述
然后继续修改docker.conf文件,删除参数skip-grant-tables
在这里插入图片描述
再将文件拷贝至容器
在这里插入图片描述
重启容器服务
systemctl restart db
然后在宿主机上面使用新密码登录,显示正常登录
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值