Skip to content

Docker 镜像指南

如何准备符合共绩云要求的 docker-compose 文件

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

指定镜像源

  1. 如果您已经上传了镜像到共绩云镜像源并需要使用它作为服务,请在 image 字段中以 harbor.suanleme.cn 开头,后面跟上仓库名和镜像名,例如:

  2. YAML
    image: harbor.suanleme.cn/library/test-jupyter-image
  3. 如果使用 Docker Hub 上的公共镜像,请直接指定镜像名,如:

  4. YAML
    image: jery1304/test-jupyter-image
  5. 请注意,在使用 Docker Hub 上的公共镜像的情况下,共绩云将尝试从上海交大代理镜像站拉取,很可能存在网络问题,因此不推荐这种做法。

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

  7. img

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

    1. YAML
      network_mode: bridge

端口转发设置

对于需要转发的端口及其域名前缀,需要在服务的 labels 中的 suanleme_n.http.port 以及suanleme_n.http.prefix字段中指定。其中 n 代表这个转发端口的序号,n 从 0 开始。如果有多个端口需要转发,请按顺序使用 suanleme_n 标签,如 suanleme_0, suanleme_1, suanleme_2。【注:转发端口前必须为suanleme0,suanleme1, suanleme2。。。】每一个 http.port 标签下面需要对应一个 http.prefix 标签,这是用来告诉服务器将去往 http.port 标签中的端口的请求解析到 "http.prefix-用户前缀-任务前缀,【prefix必须是4-16位,且只能是以小写字母开头的 小写字母+数字 的格式】。run.suanleme.cn" 这个域名。这个域名中的用户前缀和任务前缀会被自动拼接,不用写在 docker compose 中。用户前缀和任务前缀不能出现点,空格,横杠等特殊字符。下面是一个示例:

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

  2. yaml
      labels:
    第一个转发端口
          - suanleme_0.http.port=3000
          - suanleme_0.http.prefix=sd3000
          # 第二个转发端口
          - suanleme_1.http.port=3010
          - suanleme_1.http.prefix=sd3010
          # 第三个转发端口
          - suanleme_2.http.port=6006
          - suanleme_2.http.prefix=sd6006
          # 第四个转发端口
          - suanleme_3.http.port=8888
          - suanleme_3.http.prefix=sd8888
  3. yaml
    - suanleme_3.http.prefix=sd8888        #为镜像与宿主机的转发端口

其他配置

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

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

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

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

如何用 docker 向共绩云的 Harbor 镜像站推镜像

步骤 1: 登录到共绩云镜像站

在推送镜像之前,需要使用 docker login 命令登录到共绩云镜像站。在终端中输入以下命令:

Bash
docker login harbor.suanleme.cn

输入用户名和密码进行认证。如果登录成功,将看到 Login Succeeded 的消息。

步骤 2: 标记镜像

在推送镜像之前,需要为镜像打上一个标签(tag),这个标签应该包含共绩云镜像站的地址。假设有一个本地镜像 my-image,可以使用以下命令为其打标签:

Bash
docker tag my-image harbor.suanleme.cn/library/my-image:my-tag

在这个命令中,library 是共绩云镜像站上的一个公共项目的名称,my-image 是镜像的名称,my-tag 是镜像的标签。可以根据实际情况替换这些值。一般情况下,my-tag可为 "latest", 意为这个镜像的最近版本。

步骤 3: 推送镜像

打好标签后,可以使用 docker push 命令将镜像推送到共绩云镜像站:

Bash
docker push harbor.suanleme.cn/library/my-image:my-tag

镜像推送过程中,会看到上传进度的信息。如果推送成功,将在共绩云镜像站的 Web 界面上看到镜像。