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

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Privacy International News Feed
T
Threatpost
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
Intezer
博客园 - Franky
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
The Hacker News
The Hacker News
K
Kaspersky official blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tailwind CSS Blog
Project Zero
Project Zero
T
Tor Project blog
B
Blog RSS Feed
Recorded Future
Recorded Future
Scott Helme
Scott Helme
美团技术团队
V
V2EX
V
Visual Studio Blog
L
Lohrmann on Cybersecurity
P
Proofpoint News Feed
D
DataBreaches.Net
The Register - Security
The Register - Security
M
MIT News - Artificial intelligence
L
LangChain Blog
Cisco Talos Blog
Cisco Talos Blog
博客园 - 三生石上(FineUI控件)
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园_首页
P
Privacy & Cybersecurity Law Blog

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

记录:傻逼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
# 这里每个命令,就是镜像的一层

下一篇文章再讲