首页 > 解决方案 > 使用卷副本将映像推送到另一个注册表

问题描述

我正在使用以下命令在本地 docker 容器中运行图像

docker pull locustio/locust

我的 docker-compose 如下所示,为此我使用docker-compose up

version: '3'

services:
  locust-service:
    image: locustio/locust
    ports:
     - "8089:8089"
    volumes:
      - ./:/mnt/locust
    command: -f /mnt/locust/locustfile.py -H http://master:8089

我有我的卷,即 locustfile.py,其中包含测试我的系统的所有代码。现在我需要将此映像连同卷一起推送并部署到另一个私有存储库中,即文件 locustfile.py。

如何使用docker-compose push做到这一点?或者有没有其他方法可以复制卷?上述 compose 文件的docker-compose push似乎不起作用

标签: dockerdocker-composedocker-registry

解决方案


卷通常用于保存数据,而不是应用程序代码。您应该将代码构建到派生的 Docker 映像中,然后可以将其推送。

您可以将此处显示的内容写入基本的 Dockerfile:

FROM locustio/locust
COPY locustfile.py /mnt/locust
# CMD must be a JSON array if it's passing additional options to an ENTRYPOINT
CMD ["-f", "/mnt/locust/locustfile.py", "-H", "http://master:8089"]

然后你的docker-compose.yml文件只需要指定构建和运行它,而不是重复这些选项中的任何一个:

version: '3.8'
services:
  locust-service:
    build: .
    image: my-docker-hub-name/locust
    ports:
     - "8089:8089"

然后docker-compose build && docker-compose push将构建并推送图像。在目标主机上,您需要复制此docker-compose.yml文件但删除该build:行。

浏览 Locust 文档,这类似于建议使用 docker image as a base image您还可能会发现使用环境变量来设置选项比使用命令行参数更灵活,这可以让您在 Dockerfile 和docker-compose.yml运行时配置之间拆分选项。


推荐阅读