docker-compose.yml文件编写规则

news2024/9/9 6:33:32

目录

基本结构

配置示例

主要配置选项说明

文件结构和主要配置项

1. version

2. services

3. volumes

4. networks

总结


基本结构

version: '3'  # Docker Compose 文件的版本
services:     # 定义服务
  service_name:
    image: image_name:tag    # 使用的镜像和标签
    build: .                 # 构建镜像的上下文目录
    ports:
      - "host_port:container_port"   # 主机端口和容器端口的映射
    volumes:
      - ./local_path:/container_path  # 主机目录和容器目录的挂载
    environment:
      - ENV_VAR_NAME=value      # 设置环境变量
    networks:
      - network_name            # 网络配置
    depends_on:
      - other_service           # 依赖于其他服务
    restart: always            # 容器重启策略
    command: command_to_run    # 容器启动时运行的命令
volumes:                          # 定义数据卷
  volume_name:
networks:                         # 定义网络
  network_name:

配置示例

以下是一个包含常见配置的完整示例 docker-compose.yml 文件:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - webnet

  redis:
    image: redis:latest
    networks:
      - webnet

volumes:
  db_data:

networks:
  webnet:

主要配置选项说明

  • version: 定义 Docker Compose 文件的版本。通常使用 33.x 版本。

  • services: 定义所有服务。每个服务都可以有以下配置:

    • image: 指定要使用的 Docker 镜像。
    • build: 指定 Dockerfile 的上下文路径,如果需要构建镜像。
    • ports: 映射主机和容器的端口。
    • volumes: 挂载主机和容器的目录或数据卷。
    • environment: 设置环境变量。
    • networks: 连接到一个或多个网络。
    • depends_on: 指定依赖关系,确保服务启动顺序。
    • restart: 容器的重启策略。
    • command: 覆盖容器启动时的默认命令。
  • volumes: 定义数据卷,用于持久化数据。

  • networks: 定义网络,服务可以在这些网络中进行通信。

文件结构和主要配置项

1. version
  • 说明: 指定 Docker Compose 文件的版本。
  • 示例: version: '3'
  • 作用: 不同版本可能支持不同的功能,选择合适的版本可以确保与 Docker Engine 的兼容性。
2. services
  • 说明: 定义一个或多个服务,每个服务对应一个 Docker 容器。

  • 结构:

    services:
      service_name:
        image: image_name:tag
        build: .
        ports:
          - "host_port:container_port"
        volumes:
          - ./local_path:/container_path
        environment:
          - ENV_VAR_NAME=value
        networks:
          - network_name
        depends_on:
          - other_service
        restart: always
        command: command_to_run
    

  • 常见配置项:

    • image: 使用的 Docker 镜像及其标签。示例: nginx:latest
    • build: 指定 Dockerfile 的上下文路径。如果不指定镜像而提供构建上下文,则会根据 Dockerfile 构建镜像。示例: build: . 表示当前目录。
    • ports: 端口映射,将主机的端口映射到容器的端口。示例: - "80:80"
    • volumes: 挂载目录或数据卷。示例: - ./data:/data 将主机的 ./data 目录挂载到容器的 /data 目录。
    • container_name: 是一个用来指定容器名称的字段。它的作用是为通过 Docker Compose 启动的容器指定一个自定义的名称,而不是让 Docker 自动分配一个名称。
    • environment: 设置环境变量。示例: - ENV_VAR_NAME=value
    • networks: 指定容器连接到的网络。示例: - webnet
    • depends_on: 指定服务之间的依赖关系,确保启动顺序。示例: - db
    • restart: 定义容器的重启策略。选项包括 noalwaysunless-stoppedon-failure。示例: restart: always
    • command: 启动容器时运行的命令。如果指定,覆盖 Dockerfile 中的默认命令。示例: command: ["python", "app.py"]
3. volumes
  • 说明: 定义 Docker 卷,用于持久化和共享数据。
  • 示例:
    volumes:
      db_data:
    
  • 作用: 数据卷可以跨容器共享,并在容器重启或删除后保持数据。
4. networks
  • 说明: 定义网络,服务可以在这些网络中进行通信。
  • 示例:
    networks:
      webnet:
    
  • 作用: 创建自定义网络可以帮助服务之间进行隔离和通信。

总结

docker-compose.yml 文件的配置项帮助我们定义和管理多容器应用程序的各个方面。通过以下方式进行管理:

  • 版本 (version): 确保 Docker Compose 文件的兼容性。
  • 服务 (services): 定义和配置容器服务,包括镜像、端口、卷、环境变量等。
  • 数据卷 (volumes): 提供持久化存储,确保数据在容器之间共享和保留。
  • 网络 (networks): 定义容器的网络配置,允许容器之间的通信和隔离。

知识点扩展: 

docker-compose.yml 文件中,volumesvolumes 块(或 volumes:)之间有一些区别:

1. volumes 字段

service 的定义中,可以直接指定一个 volumes 字段来指定挂载的卷。例如:

version: '3'
services:
  web:
    image: nginx
    volumes:
      - /path/on/host:/path/in/container

这里的 volumes 字段直接将 /path/on/host 挂载到了 /path/in/container。这种方式是最简单和常见的方式来指定挂载卷。

2. volumes

volumes 块通常用于在 docker-compose.yml 文件的顶层定义卷,可以在多个服务之间共享。它的作用是预先声明卷,然后在服务的定义中引用它们。例如:

version: '3'
services:
  web:
    image: nginx
    volumes:
      - shared-data:/path/in/container

  db:
    image: mysql
    volumes:
      - shared-data:/var/lib/mysql

volumes:
  shared-data:

这里的 volumes 块定义了一个名为 shared-data 的卷。在 webdb 两个服务的定义中,通过 volumes 字段引用了这个卷。这种方式可以确保多个服务可以访问和共享相同的卷。

  • volumes 字段 在服务定义中直接指定了挂载的卷,适用于单个服务的简单场景。
  • volumes 用于在 docker-compose.yml 文件的顶层定义卷,允许多个服务共享相同的卷,提供了更大的灵活性和重用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网上订餐系统2024((代码+论文+ppt)

网上订餐系统2024((代码论文ppt),编号:sp006 代码经过修正,确保可以运行,下载地址在文末 技术栈: springbottvuemysql 展示: 下载地址: CSDN现在上传有问题,有兴趣的朋友先收藏.正常了贴上下载地址 备注: 专业承接各种程序java,c,c,python,cuda,AI 运行有问题请私信我,…

互联网医院系统源码与医保购药APP开发的完整技术指南

本篇文章,笔者将详细介绍互联网医院系统与医保购药APP的开发全过程,帮助开发者理解其技术要点和实现路径。 一、互联网医院系统开发 1.需求分析与系统设计 需要明确系统的功能需求,如在线问诊、预约挂号、电子病历管理、远程医疗、支付系统…

木材缺陷数据集:从手工模式到智能时代的跨越

亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 引言 …

【运维指南】常见的防火墙端口操作

每当一个应用程序想通过网络访问自己时,它就会申请一个 TCP/IP 端口,这意味着该端口不能被其他任何程序使用。那么,如何检查开放的端口,看看哪个应用程序已经在使用它呢? Windows 查看端口使用情况和进程名称 netst…

详解Qt 之QMdiArea 和 QMdiSubWindow

文章目录 前言QMdiArea概念作用为什么需要 QMdiAreaQMdiArea 的主要函数和成员函数列表 QMdiSubWindow概念作用为什么需要 QMdiSubWindowQMdiSubWindow 的主要函数和成员函数列表 示例代码 更多用法... 总结 前言 在复杂的应用程序中,尤其是那些需要同时管理多个子…

Linux AMBA 驱动:DMA 控制器 PL330 驱动简析

文章目录 1. 前言2. 背景3. PL330 简介4. PL330 驱动加载流程4.1 PL330 设备注册流程4.2 PL330 驱动加载流程 5. 小结6. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文基于…

什么牌子的骨传导耳机好?这五款骨传导耳机用过都是好评!

骨传导耳机,作为听音设备的创新之作,以其独特的传音方式赢得了市场的广泛认可。它不仅让日常听音更加健康舒适,还完美契合了运动场景的需求,让用户在享受音乐的同时,保持对周围环境的敏锐感知。这种设计上的巧思&#…

【QT串口助手】

首先非常感谢CSDN吾爱技术圈分享的QT初体验:手把手带你写一个自己的串口助手,本教程重点参考 1. 前言 由于qt应用项目需求,前期也安装过QT(参考博客:【Qt安装与简易串口控制Arduino开发板小灯教程】)&…

守护线程(Daemon Threads)详解:与非守护线程的区别

守护线程(Daemon Threads)详解:与非守护线程的区别 1、守护线程是什么?2、守护线程与非守护线程的区别2.1 JVM关闭行为2.2 任务性质2.3 线程设置2.4 示例代码 3、总结 💖The Begin💖点点关注,收…

人工智能学习笔记 - 初级篇Ⅱ - 图形可视化 - 第11节: 绘制带填充区域的图表

微信公众号:御风研墨 关注可了解更多。问题或建议,请公众号留言 文章目录 绘制带填充区域的图表应用背景准备工作操作步骤工作原理补充说明最后 绘制带填充区域的图表 应用背景 在数据可视化中,带填充区域的图表可以有效地表示数据范围、趋…

创客项目秀 | 基于 XIAO 开发板的语音向导

背景 柴火创客空间作为大湾区科技创新的窗口,每年到访空间的社区伙伴众多,为了更好的进行空间信息交互,我们希望有一个装置是可以解决:当空间管理员不在现场的时候,到访者可以通过装置获得清晰的介绍与引导。 为了解…

APP逆向 day24unidbg上

一.前言 今天开始讲app逆向最后一个也是最重要的unidbg,这已经是从初级进阶到中级的了,我会讲unidbg,讲三节课,分为上中下来和大家讲(由简单到难逐步),这节课主要是和大家讲unidbg的介绍并且会…

详解工厂模式与抽象工厂模式有什么区别?【图解+代码】

目录 工厂模式,抽象工厂模式是什么? 两种设计模式的流程: 1、工厂模式 2、抽象工厂模式 两种模式的对比 共同点: 不同点: 总结 工厂模式,抽象工厂模式是什么? 我已经具体的写了这两种模…

我的「Java全栈高级架构师高薪就业课」适合什么样的人群学习?

我的《Java全栈高级架构师高薪就业课》上线了~ 这是一套Java全栈微服务架构、以实战项目驱动的课程!包含34个模块,1514课时。对标阿里P7级别技术栈而研发,有着循序渐进的学习体系,助你开启Java进阶之旅。 我的这套《Java全栈高级…

海域感知与岸线监控实施方案:总体技术架构

文章目录 引言I 总体架构1.1 物理结构图1.2 功能逻辑结构图1.3 系统架构1.4 雷达光电船只检测系统拓扑图1.5 雷达光电船只联动跟踪效果图II 技术架构存储Geoserver视频see also引言 利用渔船现有的定位导航通讯设备等资源,实现岸线和近岸海域内违法船舶和可疑船舶预警、抓拍、…

系统学习渗透测试:从零到精通的全面指南

渗透测试,作为网络安全领域的一项重要技术,旨在通过模拟黑客攻击来评估计算机系统的安全性。对于想要系统学习渗透测试的人来说,这既是一条充满挑战的道路,也是一次深入了解网络安全的宝贵机会。本文将从基础知识、技能提升、实战…

怎麼使用ixbrowser指紋流覽器?

ixBrowser是一款指紋流覽器流覽器,利用指紋隔離技術確保在與Pixelscan等第三方檢測網站進行測試時具有出色的通過率,能夠輕鬆管理多個獨立帳戶。此外,ixBrowser能夠創建無限的獨立個人資料並邀請團隊成員。簡化了運營,降低了運營成…

转行要趁早!网络安全岗人才稀缺,前景广阔,收藏这一篇就够了

1 网络安全从业人员能力基本要求,您达标了吗? 引导 根据国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告(2023年第1号),由全国信息安全标准化技术委员会归口的《信息安全技术 网络安全从业…

设计模式15-门面模式

设计模式15-门面模式 "接口隔离"模式典型模式1. 适配器模式(Adapter Pattern)2. 装饰模式(Decorator Pattern)3. 桥接模式(Bridge Pattern)4. 代理模式(Proxy Pattern)5. …

分布式日志分析系统--ELK

文章目录 ELK概述ELK主要特点ELK应用架构 Elasticsearch原理JSON格式倒排索引 ES与关系型数据库ES相关概念ES安装说明1.环境初始化2.优化系统资源限制配置3.编辑ES服务文件elasticsearch. yml 优化ELK集群安装脚本scp的使用集群安装成功 Shell命令API使用创建索引创建Type创建分…