网站首页 > 技术文章 正文
有些容器会自动产生一些数据,为了不让数据随着container的消失而消失,保证数据的安全性。例如:数据库容器,数据表的表会产生一些数据,如果我吧container给删除,数据就丢失。为了保证数据不丢失,有了Volume的存在。
以官方的例子
- hub.docker.com 搜索mysql,查看对应的Dockerfile,VOLUME /var/lib/mysql
VOLUME的使用
从本次开始我开始用第三方SecureCRT了不再用cmd了
#镜像加速器 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io #创建一个mysql容器,MYSQL_ALLOW_EMPTY_PASSWORD使用空密码 sudo docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql sudo docker ps
#查看volume sudo docker volume ls #容器的volume的Id sudo docker volume inspect 47d003ff423ad06560cdc6e7892d420e7555753f447855fa1fd5ace8a07ab597
#创建一个mysql2,查看对应的volume sudo docker run -d --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql sudo docker volume ls sudo docker volume inspect 47d003ff423ad06560cdc6e7892d420e7555753f447855fa1fd5ace8a07ab597
- 删除container 看看volume是否会消失
sudo docker ps sudo docker stop mysql1 mysql2 sudo docker rm mysql1 mysql2 sudo docker volume ls sudo docker ps
image.png
- 现在的volume 名字不太友好啊,得起个别名
sudo docker volume ls sudo docker volume rm 06bb873ed273c2957b3798b14ed5b90d2d15af3b921c2d6dd09fd25920eba75f sudo docker volume rm 47d003ff423ad06560cdc6e7892d420e7555753f447855fa1fd5ace8a07ab597 sudo docker volume ls
#volume的别名是mysql,只向的路径是/var/lib/mysql sudo docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql sudo docker volume ls
- 验证volume生效
mysql容器放入数据,然后删除容器,在创建一个挂在容器,看看数据存在不存在。
sudo docker exec -it mysql2 /bin/bash mysql -u root show databases; create database docker; show databases; exit; exit sudo docker ps sudo docker volume ls
sudo docker rm -f mysql2 sudo docker volume ls #挂在之前的mysql的volme sudo docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql sudo docker ps sudo docker exec -it mysql1 /bin/sh mysql -u root #查看mysql数据库中的docker是否存在,结果存在 show databases;
- Dockerfile中
- VOLUME ["/var/lib/mysql"]
- 别名:持久化地址的方式
- docker run -v mysql:/var/lib/mysql
Bind Mouting
- 代码
docker run -v /home/aaa:/root/aaa
- 例子
cd ~ cd labs/docker-nginx/ more Dockerfile
sudo service docker restart docker build -t liming/nginx . sudo docker image ls
- 容器生成不适用数据持久化
sudo docker run -d -p 80:80 --name web liming/nginx curl 127.0.0.1 ip a
- 容器生成使用数据持久化
#删除原来的容器 sudo docker rm -f web #容器内的80对外部的80,pwd对应/usr/share/nginx/html的 sudo docker run -d -p 80:80 -v $(pwd):/usr/share/nginx/html --name web liming/nginx curl 127.0.0.1 sudo docker exec -it web /bin/sh cd /usr/share/nginx/html #在数据持久化目录里面增加文件aaa.test touch aaa.test exit
cd ~/labs/docker-nginx/ #查看路径已经多了一个文件aaa.test ls #修改aaa.test文件内容 vim aaa.test sudo docker exec -it web /bin/sh
sudo docker exec -it web /bin/sh #容器内可以看到数据持久化的信息 more aaa.test
PS:这个是数据持久化的一种方式通过volume的方式。bind mount 需要指定 host 文件系统的特定路径,这就限制了容器的可移植性,当需要将容器迁移到其他 host,而该 host 没有要 mount 的数据或者数据不在相同的路径时,操作会失败。但是我感觉已经很方便了
猜你喜欢
- 2024-09-12 64.手把手使用Docker
- 2024-09-12 kubernetes基础知识之docker容器和镜像
- 2024-09-12 docker 安装MongoDB(docker 安装mongodb4.4.4)
- 2024-09-12 Docker入门与实践:容器操作方法详细介绍
- 2024-09-12 Docker实战四之Docker 容器使用(docker 容器运行命令)
- 2024-09-12 【docker】:全面认识Docker和基本指令
- 2024-09-12 Docker 学习小总结(docker基础教程)
- 2024-09-12 运行Docker遇到权限问题应该如何处理?
- 2024-09-12 史上超全!Docker命令全集,值得收藏
- 2024-09-12 容器化学习-docker2生成镜像(docker手动生成镜像)
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 550℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 502℃MySQL service启动脚本浅析(r12笔记第59天)
- 480℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 478℃启用MySQL查询缓存(mysql8.0查询缓存)
- 458℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 438℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 435℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)