使用卷复制将映像推送到另一个注册表

时间:2021-05-31 07:31:40

标签: docker docker-compose docker-registry

我正在本地使用以下命令在 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 做到这一点?或者有没有其他方法可以复制卷?上述撰写文件的 docker-compose push 似乎不起作用

2 个答案:

答案 0 :(得分:1)

卷通常用于保存数据,而不是应用程序代码。您应该将代码构建到派生的 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 文档,这与对 Use docker image as a base image 的建议类似。您可能还会发现使用 use environment variables 来设置选项更灵活,而不是命令行参数,这可以让您在 Dockerfile 和 docker-compose.yml 运行时配置之间拆分选项。

答案 1 :(得分:0)

只能推送 docker 镜像。

当您运行映像创建容器时会生成卷,如官方文档 https://docs.docker.com/storage/volumes/ 中所述。

我在这里报告官方文档中的示例:

docker run -d \
  --name=nginxtest \
  -v nginx-vol:/usr/share/nginx/html \
  nginx:latest