docker compose入门6—如何挂载卷

在 Docker Compose 中,可以通过 volumes 字段将宿主机的文件或目录挂载到容器中。这样可以实现数据持久化、共享数据或配置等。以下是一些常见的挂载方式和示例。

1. 挂载单个文件

如果你想将宿主机上的一个特定文件挂载到容器中,可以使用以下格式:

复制代码
version: '3.8'

services:
  web:
    image: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf  # 将宿主机的 nginx.conf 挂载到容器中

在这个示例中,./nginx.conf 是宿主机上的文件路径,/etc/nginx/nginx.conf 是容器中的目标路径。

2. 挂载整个目录

你也可以挂载整个目录:

复制代码
version: '3.8'

services:
  app:
    image: myapp
    volumes:
      - ./data:/usr/src/app/data  # 将宿主机的 data 目录挂载到容器中

这里,./data 是宿主机的目录,/usr/src/app/data 是容器中的目标目录。

3. 使用命名卷

命名卷是在 Docker 中创建的独立卷,可以在多个容器之间共享。使用命名卷的示例:

复制代码
version: '3.8'

services:
  app:
    image: myapp
    volumes:
      - mydata:/usr/src/app/data  # 使用命名卷

volumes:
  mydata:  # 定义命名卷

在这个例子中,mydata 是一个命名卷,Docker 会自动管理它的生命周期。

4. 使用绑定挂载(Bind Mounts)

如果需要更灵活的挂载,可以使用绑定挂载。示例如下:

复制代码
version: '3.8'

services:
  app:
    image: myapp
    volumes:
      - /path/on/host:/path/in/container  # 指定宿主机和容器中的路径

这里的 /path/on/host 是宿主机上的路径,/path/in/container 是容器内的路径。

5. 其他选项

你还可以使用其他选项来配置挂载:

复制代码
version: '3.8'

services:
  app:
    image: myapp
    volumes:
      - ./data:/usr/src/app/data:ro  # 只读挂载
      - ./config:/usr/src/app/config:delegated  # 使用代理挂载

在这个例子中,:ro 表示只读挂载,而 :delegated 是一个挂载模式,它允许容器快速访问文件,而在后台同步更改。

使用示例

假设你有一个应用程序需要一个配置文件和数据目录,下面是一个完整的 Docker Compose 示例:

复制代码
version: '3.8'

services:
  web:
    image: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf  # 挂载配置文件
      - ./data:/usr/share/nginx/html  # 挂载数据目录

在这个配置中,nginx.confdata 目录都被挂载到容器中,允许 Nginx 使用宿主机上的配置和数据。

总结

通过以上方法,你可以灵活地将宿主机的文件和目录挂载到 Docker Compose 容器中。这对于配置、持久化数据和共享文件非常有用。

相关推荐
计算机毕设定制辅导-无忧学长8 分钟前
《基于SpringBoot的庭院玫瑰栽培养护知识交互式科普平台设计与实现》
java·spring boot·后端·毕业设计·个性化推荐·协同过滤算法·庭院玫瑰栽培养护知识科普平台
Json____1 小时前
从零构建家政服务平台:一套全栈架构如何打通管理端与移动端-java-springboot
java·spring boot·后端·架构·毕设·wwwoop.com
云雀衔光1 小时前
Java Spring AI MCP:在 Spring 里把 AI 接上你的业务系统
java·开发语言·人工智能·后端·测试工具·spring
重生之小比特1 小时前
【Java SE】数据类型与变量
java·开发语言·python
苏渡苇1 小时前
Spring Insight 里如何对 Span 进行清洗
java·spring boot·后端·spring·系统监控
find1star1 小时前
LeetCode 54:螺旋矩阵——用四个边界模拟矩阵收缩
java·算法·leetcode·边缘计算·学习方法
Yeniden1 小时前
Java 后端从零到企业级:第1篇 Java 基础语法——变量、数据类型与运算符
java·开发语言·apache
jiao糖瓜子1 小时前
Docker 完全指南:从镜像容器到生产部署
docker·容器·eureka·镜像·仓库
邪修king1 小时前
Linux系统篇(二十三) 基础 IO:从“文件”到“文件描述符”,彻底理解重定向
android·java·linux
云雀衔光2 小时前
MCP + 应用生成:让 AI 直接产出可交互的应用
java·人工智能·测试工具·microsoft·交互·ai编程