Skip to content

Docker Compose 指南

为了确保您的 docker-compose 文件能够适配共绩算力服务,请按照以下指南进行操作:

指定镜像源

  1. 如果您已经上传了镜像到共绩算力镜像源并需要使用它作为服务,请在 image 字段中以 harbor.suanleme.cn 开头,后面跟上仓库名和镜像名,例如:
YAML
image: harbor.suanleme.cn/library/test-jupyter-image
  1. 如果使用 Docker Hub 上的公共镜像,请直接指定镜像名,如:
YAML
image: jery1304/test-jupyter-image

请注意,在使用 Docker Hub 上的公共镜像的情况下,共绩算力将尝试从上海交大代理镜像站拉取,很可能存在网络问题,因此不推荐这种做法。

  1. 如果需要的镜像既不在共绩算力镜像源,也不在 Docker Hub 上,那么需要将镜像的 tar 文件放在任务文件夹的 images 目录中,并与 docker-compose.yml 一起上传。tar 文件的命名需将正式镜像名中的 / 替换为 _。总体来说不推荐用这种方式指定镜像源,因为这样会使任务的上传和部署过程变得非常耗时, 除非镜像文件很小。

img

  1. 网络模式设置: 服务的 network_mode 需要设置为 bridge
YAML
network_mode: bridge

端口转发设置

对于需要转发的端口及其域名前缀,您需要在服务的 labels 中指定 suanleme_n.http.portsuanleme_n.http.prefix 字段。

其中,n 代表转发端口的序号,从 0 开始。如果有多个端口需要转发,请按顺序使用 suanleme_n 标签,例如 suanleme_0, suanleme_1, suanleme_2。

注:转发端口的标签必须依次为 suanleme_0, suanleme_1, suanleme_2。

每个 http.port 标签必须对应一个 http.prefix 标签,用于指示服务器将请求转发到 http.port 指定的端口,并解析到形如 "http.prefix-[用户前缀]-[任务前缀].run.suanleme.cn" 的域名。其中,用户前缀和任务前缀会自动拼接,无需在 Docker Compose 中指定。用户前缀和任务前缀不能包含点、空格、横杠等特殊字符。以下是一个示例:

YAML
labels:
  # 第一个转发端口
  - suanleme_0.http.port=3000
  - suanleme_0.http.prefix=3000_sd1
  # 第二个转发端口
  - suanleme_1.http.port=3010
  - suanleme_1.http.prefix=3010_sd1
  # 第三个转发端口
  - suanleme_2.http.port=6006
  - suanleme_2.http.prefix=6006_sd1  
  # 第四个转发端口
  - suanleme_3.http.port=8888
  - suanleme_3.http.prefix=8888_sd1

在这个示例中,容器的 3000,3010,6006 和 8888 端口均被转发到了对应域名前缀的域名。

其他配置

docker-compose 的其余部分可以根据应用的具体需求进行自定义配置。

以下是一个完整的 docker-compose 示例文件,展示了如何配置一个符合共绩算力要求的 stable diffusion 服务:

YAML
version: '3.8'
services:
  stable_diffusion_1: # 第一个服务
    image: harbor.suanleme.cn/library/ashleykza-stable-diffusion-webui
    network_mode: bridge
    labels:
      # 第一个转发端口
      - suanleme_0.http.port=3000
      - suanleme_0.http.prefix=3000_sd1
      # 第二个转发端口
      - suanleme_1.http.port=3010
      - suanleme_1.http.prefix=3010_sd1
      # 第三个转发端口
      - suanleme_2.http.port=6006
      - suanleme_2.http.prefix=6006_sd1
      # 第四个转发端口
      - suanleme_3.http.port=8888
      - suanleme_3.http.prefix=8888_sd1
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

  stable_diffusion_2: # 第二个服务
    image: harbor.suanleme.cn/library/ashleykza-stable-diffusion-webui
    network_mode: bridge
    labels:
      # 第一个转发端口
      - suanleme_0.http.port=3000
      - suanleme_0.http.prefix=3000_sd2
      # 第二个转发端口
      - suanleme_1.http.port=3010
      - suanleme_1.http.prefix=3010_sd2
      # 第三个转发端口
      - suanleme_2.http.port=6006
      - suanleme_2.http.prefix=6006_sd2
      # 第四个转发端口
      - suanleme_3.http.port=8888
      - suanleme_3.http.prefix=8888_sd2
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

该文件仅用于演示目的而不用于展示实际功能,请根据具体需求编写自己的 docker-compose 文件。

推送镜像

请看 镜像仓库 指南。