docker - 使用卷副本将映像推送到另一个注册表
问题描述
我正在使用以下命令在本地 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似乎不起作用
解决方案
卷通常用于保存数据,而不是应用程序代码。您应该将代码构建到派生的 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
运行时配置之间拆分选项。
推荐阅读
- sql - 添加列并在列不存在时更新数据时出错
- asp.net - 在本地和云中运行的企业应用程序的 Google 登录实施
- php - 无法在数据库中插入多个文件名
- python - Flutter 无法处理后端 Flask 的 http 请求,现在该怎么办?
- javascript - “window.open _self”问题仅适用于 IE7 或更低版本
- python - drf-spectacular:向 HTTP_204 添加描述
- javascript - 能够创建角色的 Discord Bot
- multithreading - 如何等待一个或多个被阻止的事件?
- google-apps-script - Google Workspace - 无法以管理员身份授予权限
- javascript - 在 React 17.0.1 上使用 SVG