跳到主要内容

理解volumes

volumes 就是“把你电脑上的文件夹/文件,和容器里的文件夹/文件,连起来”。

  • volumes可以理解为卷、存储空间
  • volumes 可以把你项目里的文件,挂载到容器内部的某个路径

这样做有两个主要好处:

  • 数据持久化:容器删了,数据还在你电脑上,不会丢。
  • 因为容器是一个临时的环境,删除容器之后,容器内部的数据可能会丢失,通过volumes把数据保存在容器的外面
  • 代码/配置热更新:你改本地文件,容器里马上同步(适合开发)。

volumes的作用​

  • 将项目的文件挂载到容器内部文件系统
  • 作用:把“宿主机/项目里的文件或数据目录”挂载到“容器内部的指定路径”。
bash
它主要解决两个问题:
1. 给容器提供配置文件,比如 init.sql、redis.conf
2. 持久化容器数据,比如 PostgreSQL 数据、MinIO 文件、Redis 数据

volumes 的常见用法​

格式:

bash
本地路径:容器路径

例子

  • 把服务器上当前目录下的 server 文件夹,挂载到容器里的 /app 目录。
  • 在 server 里加/删/改文件,容器里的 /app 也会同步变化。
bash
volumes:
- ./server:/app

挂载单个文件​

  • 把你本地的 nginx.conf 文件,挂载到容器的 /etc/nginx/nginx.conf,容器会用你的配置。
bash
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的卷
bash
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应用​

bash
services:
myapp:
image: node:16
volumes:
- ./src:/app/src # 挂载代码目录
- ./config.json:/app/config.json # 挂载配置文件
- mydata:/app/data # 挂载命名卷

volumes 的常见场景​

  • 开发时:挂载代码目录,改代码自动生效。
  • 配置文件:挂载本地配置到容器。
  • 数据库数据:用命名卷,保证数据不会因容器删除而丢失。

volumes总结​

  • volumes 就是“把本地和容器的文件/文件夹连起来”。
  • 格式:本地路径:容器路径,可以加 :ro 只读。
  • 支持挂载文件、文件夹,也支持命名卷。
  • 挂载后,改本地文件,容器里会同步,非常适合开发环境