理解volumes
volumes 就是“把你电脑上的文件夹/文件,和容器里的文件夹/文件,连起来”。
- volumes可以理解为卷、存储空间
volumes可以把你项目里的文件,挂载到容器内部的某个路径
这样做有两个主要好处:
- 数据持久化:容器删了,数据还在你电脑上,不会丢。
- 因为容器是一个临时的环境,删除容器之后,容器内部的数据可能会丢失,通过volumes把数据保存在容器的外面
- 代码/配置热更新:你改本地文件,容器里马上同步(适合开发)。
volumes的作用
- 将项目的文件挂载到容器内部文件系统
- 作用:把“宿主机/项目里的文件或数据目录”挂载到“容器内部的指定路径”。
它主要解决两个问题:
1. 给容器提供配置文件,比如 init.sql、redis.conf
2. 持久化容器数据,比如 PostgreSQL 数据、MinIO 文件、Redis 数据
volumes 的常见用法
格式:
本地路径:容器路径
例子
- 把服务器上当前目录下的 server 文件夹,挂载到容器里的 /app 目录。
- 在 server 里加/删/改文件,容器里的 /app 也会同步变化。
volumes:
- ./server:/app
挂载单个文件
- 把你本地的 nginx.conf 文件,挂载到容器的 /etc/nginx/nginx.conf,容器会用你的配置。
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
Named Volume和Bind Mount
- Named Volume是Docker管理的卷,是Docker给这个存储卷起的名字
- Bind Mount是绑定本地目录
- 常见的是:Named Volume 保存日志,使用 Bind Mount 保存代码
- 通过
docker volume ls可以查看所有的docker的卷
volumes:
# 宿主机本地项目目录 <-> Linux 容器 /data/www/demo-node
- ./workspace/demo-node:/data/www/demo-node
# Docker容器中管理卷,比如linux_logs这个是Docker卷的名字
- linux_logs:/var/log/lab
- nginx_logs:/var/log/nginx
volumes 在 docker-compose.yml应用
services:
myapp:
image: node:16
volumes:
- ./src:/app/src # 挂载代码目录
- ./config.json:/app/config.json # 挂载配置文件
- mydata:/app/data # 挂载命名卷
volumes 的常见场景
- 开发时:挂载代码目录,改代码自动生效。
- 配置文件:挂载本地配置到容器。
- 数据库数据:用命名卷,保证数据不会因容器删除而丢失。
volumes总结
- volumes 就是“把本地和容器的文件/文件夹连起来”。
- 格式:本地路径:容器路径,可以加 :ro 只读。
- 支持挂载文件、文件夹,也支持命名卷。
- 挂载后,改本地文件,容器里会同步,非常适合开发环境