【docker 】Compose 使用介绍

news2024/11/24 20:14:50

Docker Compose

Docker Compose文档

Docker Compose GitHub地址

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 中有两个重要的概念:
  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose的默认管理对象是项目,也就是通过docker-compose.yml定义的一组服务集合,通过一些命令来对项目中的一组容器进行便捷地生命周期管理。

Compose 使用的三个步骤:
  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
Compose 文件

Compose 文件的默认路径是compose.yaml(首选)或compose.yml放置在工作目录中。Compose 还支持docker-compose.yaml并向docker-compose.yml后兼容早期版本。如果两个文件都存在,Compose 会优先选择规范的compose.yaml。

可以将多个 Compose 文件 合并在一起来定义应用程序模型。YAML 文件的组合是通过根据设置的 Compose 文件顺序附加或覆盖 YAML 元素来实现的。简单的属性和映射会被最高阶的 Compose 文件覆盖,列表会通过附加进行合并。只要要合并的补充文件托管在其他文件夹中,就会根据第一个 Compose 文件的父文件夹解析相对路径。由于某些 Compose 文件元素既可以表示为单个字符串也可以表示为复杂对象,因此合并适用于扩展形式。

如果想重用其他 Compose 文件,或者将应用程序模型的一部分分解为单独的 Compose 文件,还可以使用 include. 如果 Compose 应用程序依赖于由不同团队管理的另一个应用程序,或者需要与其他人共享,这非常有用。

docker-compose.yml文件配置

Compose file | Docker Docs(官方)

示例(mysql):
version: '3'
services:
  mysql:
    restart: always
    image: mysql:5.7.18
    container_name: mysql-lable
    volumes:
      - /apps/mysql/mydir:/mydir
      - /apps/mysql/datadir:/var/lib/mysql
      - /apps/mysql/conf/my.cnf:/etc/my.cnf
      # 数据库还原目录 可将需要还原的sql文件放在这里
      - /apps/mysql/source:/docker-entrypoint-initdb.d
    environment:
      - "MYSQL_ROOT_PASSWORD=yourpassword"
      - "MYSQL_DATABASE=yourdbname"
      - "TZ=Asia/Shanghai"
    ports:
      # 使用宿主机的3306端口映射到容器的3306端口
      # 宿主机:容器
      - 3306:3306

version(版本:可选)

version版本信息,version属性由 Compose 规范定义,以实现向后兼容性。它只是提供信息。

Compose 不会version选择精确的架构来验证 Compose 文件,而是在实现时更喜欢使用最新的架构。
Compose 验证它是否可以完全解析 Compose 文件。

services(服务)

服务是应用程序中计算资源的抽象定义,可以独立于其他组件进行扩展或替换。服务由一组容器支持,由平台根据复制要求和放置约束运行。由于服务由容器支持,因此它们由 Docker 映像和一组运行时参数定义。服务中的所有容器都是使用这些参数创建的。

Compose 文件必须将services顶级元素声明为映射,其键是服务名称的字符串表示形式,其值是服务定义。服务定义包含应用于每个服务容器的配置。

每个服务还可能包含一个build部分,该部分定义如何为该服务创建 Docker 映像。Compose 支持使用此服务定义构建 docker 镜像。如果未使用,该build部分将被忽略,并且 Compose 文件仍被视为有效。

每个服务都定义运行其容器的运行时约束和要求。该deploy部分对这些约束进行分组,并允许平台调整部署策略,以最好地匹配容器的需求与可用资源。

build

Compose file build | Docker Docs(官方)

指定为构建镜像上下文路径。build可以指定为定义上下文路径的单个字符串,也可以指定为详细的构建定义。

Compose 文件服务的子集build ,其他服务可以使用该image属性。当build服务存在时,Compose 会忽略image相应服务的属性,因为 Compose 可以从源构建图像。

当服务定义同时包含image属性和build部分时,Compose 无法保证拉取的映像严格等同于从源构建相同的映像。如果没有任何明确的用户指令,带有build支持的 Compose 首先尝试拉取映像,然后如果在注册表中找不到映像,则从源构建。Compose 可能会提供选项来根据用户请求自定义此行为。

Compose 文件的父文件夹的相对路径。该路径必须是一个目录并且必须包含Dockerfile。

services:
  webapp:
    build: ./dir

git 存储库 URL。Git URL 在其片段部分接受上下文配置,以冒号 ( :) 分隔。第一部分表示 Git 签出的引用,可以是分支、标签或远程引用。第二部分表示存储库内用作构建上下文的子目录。

services:
  webapp:
    build: https://gitee.com/chengxuyuan/example.git#branch_or_tag:subdirectory

context定义包含 Dockerfile 的目录的路径,或 git 存储库的 URL。如果未明确设置,context则默认为项目目录 ( .)。

context

上下文路径。

args参数


定义构建参数,即 DockerfileARG值。args可以在Compose文件下设置build键来定义GIT_COMMIT。args可以设置为映射或列表.

指定构建参数时可以省略值,在这种情况下,构建时的值必须通过用户交互获取,否则在构建 Docker 映像时将不会设置构建参数。

build:
  context: .
  args:
    GIT_COMMIT: cdc3b19
SSH


ssh定义镜像构建器在镜像构建期间应使用的 SSH 身份验证(例如,克隆私有存储库)。

ssh属性语法可以是:
  • default:让构建器连接到 ssh-agent。
  • ID=path:ID 和关联路径的键/值定义。它可以是 PEM文件或 ssh-agent 套接字的路径。
build:
  context: .
  ssh:
    - default   # mount the default ssh agent

或者

build:
  context: .
  ssh: ["default"]   # mount the default ssh agent

myproject使用带有本地 SSH 密钥路径的自定义 ID :

build:
  context: .
  ssh:
    - myproject=~/.ssh/shitang.pem
cache_from

cache_from定义图像生成器应用于缓存解析的源列表。
缓存位置语法遵循全局格式[NAME|type=TYPE[,KEY=VALUE]]。SimpleNAME实际上是 的快捷表示法type=registry,ref=NAME。

不支持的缓存将被忽略,并且不会阻止您构建图像。
Compose Build 实现可能支持自定义类型,Compose 规范定义了必须支持的规范类型:

  • registry从按键设置的 OCI 映像中检索构建缓存ref
build:
  context: .
  cache_from:
    - alpine:latest
    - type=local,src=path/to/cache
    - type=gha
cache_to

定义用于与未来构建共享构建缓存的导出位置列表。

缓存目标是使用type=TYPE[,KEY=VALUE]与 cache_from.
不支持的缓存将被忽略,并且不会阻止您构建图像。

build:
  context: .
  cache_to:
   - user/app:cache
   - type=local,dest=path/to/cache
labels标签


labels将元数据添加到结果图像中。labels可以设置为数组或映射。
建议您使用反向 DNS 表示法,以防止您的标签与其他软件发生冲突。

build:
  context: .
  labels:
    com.example.description: "chengxuyuan webapp"
    com.example.department: "dashu"
    com.example.label-with-empty-value: ""

或者

build:
  context: .
  labels:
    - "com.example.description=chengxuyuan webapp"
    - "com.example.department=dashu"
    - "com.example.label-with-empty-value"
network网络


设置网络容器连接以获取RUN构建期间的说明。

build:
  context: .
  network: host

用于none在构建期间禁用网络:

build:
  context: .
  network: none
target目标


定义要构建的阶段,如多阶段中定义的那样Dockerfile。多层构建,可以指定构建哪一层。

build:
  context: .
  target: prod
secrets


secrets授予对每个服务构建基础上秘密定义的敏感数据的访问权限 。支持两种不同的语法变体:短语法和长语法。
如果此 Compose 文件的部分中未定义密钥,Compose 会报告错误 secrets。


简短语法


短语法变体仅指定秘密名称。这将授予容器对机密的访问权限,并将其以只读方式安装到/run/secrets/<secret_name> 容器内。源名称和目标安装点均设置为秘密名称。
以下示例使用短语法来授予服务构建frontend对server-certificate密钥的访问权限。的值server-certificate设置为文件的内容./server.cert。

services:
  frontend:
    build:
      context: .
      secrets:
        - server-certificate
secrets:
  server-certificate:
    file: ./server.cert
长语法


长语法提供了如何在服务容器内创建机密的更细粒度。

  • source:平台上存在的机密名称。
  • target/run/secrets/:要挂载到服务任务容器中的文件的名称。如果未指定则默认为source。
  • uid和gid:拥有 /run/secrets/服务任务容器中的文件的数字 UID 或 GID。默认值是运行容器的用户。
  • mode: 权限用于将文件安装到/run/secrets/ 服务的任务容器中,以八进制表示法。默认值是世界可读的权限(mode 0444)。如果设置了可写位,则必须忽略该位。可以设置可执行位。

以下示例将机密文件的名称设置server-certificate为server.crt 在容器内,将模式设置为0440(组可读)并将用户和组设置为103。Secret的值server-certificate由平台通过查找提供,并且 Secret 生命周期不由 Compose 直接管理。

services:
  frontend:
    build:
      context: .
      secrets:
        - source: server-certificate
          target: server.cert
          uid: "103"
          gid: "103"
          mode: 0440
secrets:
  server-certificate:
    external: true
tags标签


tags定义必须与构建映像关联的标签映射列表。此列表是对image

tags:
  - "myimage:mytag"
  - "registry/username/myrepos:my-other-tag"
platforms平台


platforms定义目标平台。

当platforms省略该属性时,Compose 会将服务的平台包含在默认构建目标平台的列表中。
定义该platforms属性后,Compose 会包含该服务的平台,否则用户将无法运行他们构建的映像。

平台列表。

build:
  context: "."
  platforms:
    - "linux/amd64"
    - "linux/arm64"

Compose安装

【docker 】Compose安装

networks

配置容器连接的网络,顶级networks元素允许您配置可跨多个服务重用的命名网络。要跨多个服务使用网络,您必须使用 顶级元素中的网络属性显式授予每个服务访问权限。顶级元素具有提供更精细控制的附加语法services。

基本示例


在以下示例中,在运行时创建网络front-tier和,并将服务连接到和网络。back-tierfrontendfront-tierback-tier

services:
  frontend:
    image: example/webapp
    networks:
      - front-tier
      - back-tier

networks:
  front-tier:
  back-tier:
高级示例

高级示例显示了一个定义两个自定义网络的 Compose 文件。服务与服务proxy之间是隔离的db,因为它们不共享公共网络。只能app与两者对话。

services:
  proxy:
    build: ./proxy
    networks:
      - frontend
  app:
    build: ./app
    networks:
      - frontend
      - backend
  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    # Use a custom driver
    driver: custom-driver-1
  backend:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"
driver

指定该网络应使用哪个驱动程序。如果驱动程序在平台上不可用,Compose 将返回错误。

默认值和可用值是特定于平台的。Compose 支持以下驱动程序: none和host

  • host:使用主机的网络堆栈。
  • none:关闭网络。

使用内置网络(例如host和 )的语法none是不同的,因为此类网络隐式存在于 Compose 范围之外。要使用它们,您必须使用名称host或none以及 Compose 可以使用的别名(hostnet在nonet以下示例中)定义外部网络,然后使用其别名授予服务访问该网络的权限。

services:
  web:
    networks:
      hostnet: {}

networks:
  hostnet:
    external: true
    name: host
services:
  web:
    ...
    networks:
      nonet: {}

networks:
  nonet:
    external: true
    name: none
volumes

volumes是由容器引擎实现的持久数据存储。Compose 为服务提供了一种中立的方式来挂载卷,并提供配置参数来将卷分配给基础设施。

volumes声明允许您配置可在多个服务之间重用的命名卷。要在多个服务中使用卷,您必须使用 顶级元素中的volumes属性显式授予每个服务访问权限。services该volumes属性具有提供更精细控制的附加语法。

以下示例显示了一个双服务设置,其中数据库的数据目录作为名为 的卷与另一个服务共享, db-data以便可以定期备份。

services:
  backend:
    image: example/database
    volumes:
      - db-data:/etc/data

  backup:
    image: backup-service
    volumes:
      - db-data:/var/lib/backup/data

volumes:
  db-data:
cap_add,cap_drop

添加或删除容器拥有的宿主机的内核功能。

cap_add:
  - ALL # 开启全部权限

cap_drop:
  - SYS_PTRACE # 关闭 ptrace权限
cgroup_parent

为容器指定父 cgroup 组,意味着将继承该组的资源限制。

cgroup_parent: m-executor-abcd

command

覆盖容器启动的默认命令。

command: ["bundle", "exec", "thin", "-p", "3000"]

常用命令

docker-compose up

部署一个 Compose 应用,默认情况下该命令会读取名为 docker-compose.yml 或 docker-compose.yaml 的文件,当然用户也可以使用 -f 指定其他文件名。通常情况下,会使用 -d 参数令应用在后台启动


docker-compose stop


停止 Compose 应用相关的所有容器,但不会删除它们,被停止的应用可以很容易地通过 docker-compose restart 命令重新启动。

docker-compose rm


 用于删除已停止的 Compose 应用,它会删除容器和网络,但是不会删除卷和镜像。

docker-compose restart


重启已停止的 Compose 应用,如果用户在停止该应用后对其进行了变更,那么变更的内容不会反映在重启后的应用中,这时需要重新部署应用使变更生效。

docker-compose ps


用于列出 Compose 应用中的各个容器,输出内容包括当前状态、容器运行的命令以及网络端口。

docker-compose down


停止并删除运行中的 Compose 应用,它会删除容器和网络,但是不会删除卷和镜像。





 

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

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

相关文章

在React中实现好看的动画Framer Motion(案例:跨DOM元素平滑过渡)

前言 介绍 Framer Motion 是一个适用于 React 网页开发的动画库&#xff0c;它可以让开发者轻松地在他们的项目中添加复杂和高性能的动画效果。该库提供了一整套针对 React 组件的动画、过渡和手势处理功能&#xff0c;使得通过声明式的 API 来创建动画变得简单直观。 接下来…

modbus 通信协议介绍与我的测试经验分享

1、简介 Modbus 协议是一种通信协议&#xff0c;用于工业自动化系统中的设备间通信。该协议最初由 Modicon 公司开发&#xff0c;并于 1979 年发布。 Modbus 协议通过串行通信格式进行通信&#xff0c;在物理层上支持 RS-232、RS-422 和 RS-485 等多种通信方式。在协议层面&am…

YashanDB 携智慧政务方案亮相数字政府建设与数字湾区发展成果博览会

由广东省人民政府主办的第二届数字政府建设峰会暨数字湾区发展成果博览会于 12月8日-10日在广州举办。作为数字政府、智慧城市建设的核心支撑力量&#xff0c;深算院携单机/主备、共享集群、空间数据库等 YashanDB系列产品亮相本次博览会&#xff0c;展示最新的研发成果、场景应…

spring6 基于xml自动装配

目录结构 代码 UserContronller.java package bean.auto.controller;import bean.auto.service.UserService; import bean.auto.service.UserServiceImpl;public class UserContronller {private UserService userService;public void setUserService(UserService userServ…

通过“待办事项列表项目”快速学习Pyqt5的一些特性

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4种项目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

持续集成交付CICD:Jenkins流水线操作Harbor仓库

目录 一、实验 1.Jenkins主节点安装Docker 2.Jenkins主节点安装Harbor 3.Jenkins从节点安装Docker 4.Jenkins流水线操作Harbor仓库 二、问题 1.Jenkins主节点登录Harbor仓库报错 2.Jenkins流水线里从节点操作docker报错 3.Jenkins流水线里从节点远程登录Harbor仓库报错…

西南科技大学数据库实验二(表数据插入、修改和删除)

一、实验目的 &#xff08;1&#xff09;学会用SQL语句对数据库进行插入、修改和删除数据操作 &#xff08;2&#xff09;掌握insert、update、delete命令实现对表数据插入、修改和删除等更新操作。 二、实验任务 创建数据库&#xff0c;并创建Employees表、Departments表和…

佛山IBM System x3550 M4服务器维修检查

案例背景&#xff1a; 一家位于东莞的制造公司&#xff0c;在其佛山分厂中安装了一台IBM X3550 M4服务器作为其关键业务设备。该服务器负责管理和存储公司的生产数据、ERP系统和供应链数据。在生产过程中&#xff0c;该服务器突然发生了故障&#xff0c;导致佛山分厂的生产中断…

maven+spock

pom配置 话说JunitMockito的组合用起来是真难用&#xff0c;还是Spock的简单&#xff0c;尤其是参数化的测试。junit的Parameter是鸡肋&#xff0c;杂恶心&#xff1b;Theories用来也不爽。 <?xml version"1.0" encoding"UTF-8"?><project xm…

如何预防最新的.locked、.locked1勒索病毒感染您的计算机?

尊敬的读者&#xff1a; 近期&#xff0c;网络安全领域迎来一股新潮——.locked、.locked1勒索病毒的威胁&#xff0c;其先进的加密技术令人生畏。本文将深入剖析.locked、.locked1勒索病毒的阴谋&#xff0c;提供特色数据恢复策略&#xff0c;并揭示锁定恶劣行径的先锋预防手…

如何实现订单自动取消

由于Redis具有过期监听的功能&#xff0c;于是就有人拿它来实现订单超时自动关闭的功能&#xff0c;但是这个方案并不完美。今天来聊聊11种实现订单超时自动关闭的方案&#xff0c;总有一种适合你&#xff01;这些方案并没有绝对的好坏之分&#xff0c;只是适用场景的不大相同。…

linux系统启动时运行web程序

1.修改rc.local文件 执行命令如果找不到会报错command not found &#xff0c;使用全路径即可 找不到的话 可以使用which 命令 找到路径 后台查看执行日志 2.修改rc.local文件的权限 chmod x rc.local 然后reboot 可以查到进程和启动日志

设计模式 简单工厂 工厂方法模式 抽象工厂模式

工厂模式介绍 工厂模式是我们最常用的实例化对象模式了&#xff0c;是用工厂方法代替new操作的一种模式。它是创建型模式。 简单工厂 简单工厂模式是指由一个工厂对象决定创建出哪一种产品类的实例, 但它不属于GOF 23种设计模式 简单工厂适用于工厂类负责创建的对象较少的场景,…

Docker部署wordpress和Jenkins

准备机器&#xff1a; 192.168.58.151 &#xff08;关闭防火墙和selinux&#xff09; 安装好docker服务 &#xff08;详细参照&#xff1a;http://t.csdnimg.cn/usG0s 中的国内源安装docker&#xff09; 部署wordpress: 创建目录&#xff1a; [rootdocker ~]# mkdi…

2043杨辉三角(C语言)

目录 一&#xff1a;题目 二&#xff1a;思路分析 三&#xff1a;代码 一&#xff1a;题目 二&#xff1a;思路分析 1.通过杨辉三角&#xff0c;不难发现中间的数等于肩头两个数之和 2.但是当我们的输出结果&#xff0c;与杨辉三角的形式有所不同&#xff0c;但是我们可以找…

智能优化算法应用:基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.秃鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…

【MySQL】SQL通用语法 、介绍SQL分类

SQL通用语法 1.SQL语句可以单行或多行书写&#xff0c;以分号结尾 2.MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写。 3.注释&#xff1a; 单行注释&#xff1a; -- 或 # 多行注释: /* */ SQL分类 SQL分类主要分为4类 分别是 DDL DML DQL DCL

Stable Diffusion 微调及推理优化实践指南

随着 Stable Diffsuion 的迅速走红&#xff0c;引发了 AI 绘图的时代变革。然而对于大部分人来说&#xff0c;训练扩散模型的门槛太高&#xff0c;对 Stable Diffusion 进行全量微调也很难入手。由此&#xff0c;社区催生了一系列针对 Stable Diffusion 的高效微调方案&#xf…

go学习redis的学习与使用

文章目录 一、redis的学习与使用1.Redis的基本介绍2.Redis的安装下载安装包即可3.Redis的基本使用1&#xff09;Redis的启动&#xff1a;2&#xff09;Redis的操作的三种方式3&#xff09;说明&#xff1a;Redis安装好后&#xff0c;默认有16个数据库&#xff0c;初始默认使用0…

深入解析 Spring 和 Spring Boot 的区别

目录 引言 1. 设计理念 1.1 Spring 框架的设计理念 1.2 Spring Boot 的设计理念 2. 项目配置 2.1 Spring 框架的项目配置 2.2 Spring Boot 的项目配置 3. 自动配置 3.1 Spring 框架的自动配置 3.2 Spring Boot 的自动配置 4. 微服务支持 4.1 Spring 框架的微服务支持…