惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
Help Net Security
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
N
News | PayPal Newsroom
V2EX - 技术
V2EX - 技术
博客园 - 【当耐特】
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
有赞技术团队
有赞技术团队
S
Schneier on Security
S
SegmentFault 最新的问题
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives
IT之家
IT之家
Project Zero
Project Zero
博客园 - 司徒正美
P
Privacy International News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Jina AI
Jina AI
Security Latest
Security Latest
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
NISL@THU
NISL@THU
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity

云端的解构者 | 西行寺岩羊的博客

记录:傻逼win11美化插件导致资源管理器崩溃 炸鸡 武汉 最近在干嘛 当善良成为廉价品:为什么你的帮助换不来感激? Minecraft跨平台服务器搭建记录 防弹笔记法(草稿 CSS纸张阴影二三事 Docker:网络 Docker:DockerFile Docker:镜像讲解 Docker:基本命令 Spring:登录后逻辑:JWT、拦截器与ThreadLocal Spring:Redis
Docker:容器数据卷
西行寺岩羊 · 2025-05-14 · via 云端的解构者 | 西行寺岩羊的博客

Docker:容器数据卷

是什么?可以吃吗?

Docker 理念:把应用和环境打包成一个镜像
那么数据呢?如果数据都在容器里面,那把容器删了不就啥都没有了吗?
需求:数据持久化
比如:我有一个MySQL容器,删了就没有了,我想让数据存在本地而不是在容器里。

容器之间有一个数据共享的技术,Docker容器中产生的数据可以同步到本地。
这就是卷技术,目录的挂载,将我们容器内的目录,挂在到Linux上面。

1
mysql/usr/mysql -> linux/home/mysql

就是容器的持久化和同步操作,容器间的数据也可以共享

如何使用?

直接使用命令挂载 -v

1
docker run -it -v 主机目录:容器内目录

这样主机目录和容器内目录的文件会进行双向同步

实例

MySQL
1
docker run -d -p 1919:3306 -v /home/mysql/conf:/etc/mysql/comf.d -v /home/mysql/data:/var/lib/mysql -e ES_JAVA_OPTS=-Xms64m -Xmx512m -e MYSQL_ROOT_PASSWORD=114514 --name mysql-demo  mysql:latest

假设我们删除这个容器,本地的数据依旧不会丢失,这就实现了容器数据持久化的功能

具名和匿名挂载

匿名挂载
1
2
3
4
5
6
7
8
9
-v 容器内路径
docker run -d -P --name nginx01 -v /ect/nginx nginx
# 查看所有 volume 的情况
docker volume ls
DRIVER VOLUME NAME
local 9af6582b20e390febba278f366682dd8aaf6ab58f0e2b96c21f6eabd40ef5fb2
local 5462336c5e984de19ce4c89b9fbf66920409b9b165e5a5bb6a10c88916698487
local d2e5f63f05a5810ce371fe7a9c5f453c15405053018890ff8e0cee881a84eb9
# 这里发现,这种就是匿名挂载,我们在-V只写了容器内的路径,没有写容器外的路径!
具名挂载
1
2
3
4
5
6
7
8
9
10
-v 卷名:容器内路径
docker run -d -P --name nginx02 -v jvmk-nginx:/ec/nginx nginx
docker volume ls
DRIVER VOLUME NAME
...
local jvmk-nginx
# 查看卷
docker volume inspect jvmk-nginx
...
"Mountpoint":"/var/lib/docker/volumes/juming-ninx/_data",

所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data
我们通过具名挂载可以方便的找到我们的卷,大多数情况在使用的具名挂载

区别
1
2
3
-v 容器内路径                    #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载!

拓展
通过-v 容器内路径:ro / rw改变读写权限

1
2
3
4
# 只能从外部改变,无法在容器内改变
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
# 可读写
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

数据卷容器

就是专门用来提供数据卷的容器
创建一个容器A,让它管理数据卷,然后别的容器通过 --volumes-from 把它的数据挂过来用,还可以容器间的数据共享

1
2
3
4
# 创建一个数据卷容器
docker create -v /data --name data-container ubuntu
# 其他容器挂载 data-container 的数据卷
docker run -d --volumes-from data-container ubuntu

生命周期持续到没有人使用为止

Dockerfile

Dockerfile 就是用来构建 docker 镜像的构建文件(命令脚本)

创建一个dockerfile文件,名字可以随机,建议 dockerfile

1
2
3
4
5
6
# 文件内容 指令(大写) 参数
FROM centos
VOLUME ["vo1ume01","vo1ume02"]
CMD echo "----end----"
CMD /bin/bash
# 这里每个命令,就是镜像的一层

下一篇文章再讲