一下是一份docker-compose文件,用于学习锚点
这是一个 YAML 格式的配置文件片段,其中 &automatic
表示创建一个名为 automatic
的锚点,<<: *base_service
表示该配置继承了名为 base_service
的基础配置。接下来定义了一些自定义配置项,如 profiles
、build
、image
和 environment
等。
具体解释如下:
&automatic
:创建锚点,名称为automatic
。<<: *base_service
:表示继承基础配置,可以认为是引用了一个名为base_service
的配置模板,并将其中所有属性都复制到当前配置中。profiles: ["auto"]
:设置profiles
为["auto"]
,表示只针对auto
配置文件生效。build: ./services/AUTOMATIC1111
:指定 Docker 构建上下文路径,在该路径下 Docker 将构建服务镜像。image: sd-auto:58
:指定 Docker 镜像名称和标签。environment: - CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
:设置环境变量CLI_ARGS
为"--allow-code --medvram --xformers --enable-insecure-extension-access --api"
。
这份配置文件片段通常用于容器编排、持续集成与部署等场景,旨在简化应用部署流程。
version: '3.9'
x-base_service: &base_service
ports:
- "7860:7860"
volumes:
- &v1 ./data:/data
- &v2 ./output:/output
stop_signal: SIGINT
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [compute, utility]
name: webui-docker
services:
download:
build: ./services/download/
profiles: ["download"]
volumes:
- *v1
auto: &automatic
<<: *base_service
profiles: ["auto"]
build: ./services/AUTOMATIC1111
image: sd-auto:58
environment:
- CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
auto-cpu:
<<: *automatic
profiles: ["auto-cpu"]
deploy: {}
environment:
- CLI_ARGS=--no-half --precision full --allow-code --enable-insecure-extension-access --api
invoke: &invoke
<<: *base_service
profiles: ["invoke"]
build: ./services/invoke/
image: sd-invoke:29
environment:
- PRELOAD=true
- CLI_ARGS=--xformers
# invoke-cpu:
# <<: *invoke
# profiles: ["invoke-cpu"]
# environment:
# - PRELOAD=true
# - CLI_ARGS=--always_use_cpu
comfy: &comfy
<<: *base_service
profiles: ["comfy"]
build: ./services/comfy/
image: sd-comfy:2
tty: true
environment:
- CLI_ARGS=
comfy-cpu:
<<: *comfy
profiles: ["comfy-cpu"]
deploy: {}
environment:
- CLI_ARGS=--cpu
以下是一个 YAML 锚点经典案例,用于定义多个相似但不完全相同的结构体:
# 定义锚点 base
base: &base
name: ""
age: 0
gender: ""
# 引用锚点 base 并创建结构体 A
A:
<< : *base
name: "John"
age: 25
gender: "Male"
# 引用锚点 base 并创建结构体 B
B:
<< : *base
name: "Jane"
age: 30
gender: "Female"
在上面的例子中,使用 &base 创建了一个名为 base 的锚点,并定义了三个属性:name、age 和 gender。然后通过 <<: *base 引用该锚点以创建两个新的结构体 A 和 B。
由于 A 和 B 继承了 base 锚点的所有属性和值,因此可以说它们是相似但不完全相同的结构体。这种方式可以大大简化配置文件编写和管理工作,并提高代码复用性和可维护性。