docker - Docker-compose 标记和推送
问题描述
我有一些尝试与之同步的 docker 容器docker-compose
(目前由 bash 脚本运行)。我正在寻找一种方法来标记并将它们推送到我们基于 ec2 的 dockerhub(私有服务器)。
简单地使用docker
我们做了这样的事情(对于每个容器):
$ docker build -f someDockerfile -t some
$ docker tag some <docker_hub_server>/some
$ docker push <docker_hub_server>/some
我正在尝试将其复制到docker-compose
. 我尝试了一些事情,但这个似乎接近工作(但当然没有工作):
码头工人-compose.yml:
version: '3'
services:
some:
container_name:some
image: some:<docker_hub_server>/some
但是当我运行时:
$ docker-compose push
我得到:
Pushing some (base:<docker_hub_server>/base:latest)...
ERROR: invalid reference format
关于如何标记和推送容器的任何想法?
ps:我知道这不是docker-compose
要使用的方式,但我也知道这是可能的,并且符合我的需求。
解决方案
我已经用 Docker Hub 测试了这种方法,所以你应该能够通过以下配置和 shell 会话来实现你想要的:
码头工人-compose.yml
version: '3'
services:
build-1:
build:
context: ./build-1
image: user/project-1
build-2:
build:
context: ./build-2
image: user/project-2
(在这里,如果您使用的不是 Docker Hub,而是另一个 Docker 注册表,则应替换user/project-1
为,例如, 。)registry.name/user/project-1
quay.io/user/project-1
此处涉及的各个字段(build:
、context:
等)在docker-compose 文档的此页面中进行了描述。
上面的docker-compose.yml
文件假设您有以下树(包括.gitignore和一些.dockerignore文件,以符合最佳实践):
.
├── build-1
│ ├── Dockerfile
│ └── .dockerignore
├── build-2
│ ├── Dockerfile
│ └── .dockerignore
├── docker-compose.yml
└── .gitignore
然后在终端中执行:
$ docker login
# → append the domain name of your Docker registry
# if you are not using Docker Hub; for example:
# docker login quay.io
$ docker-compose build --pull
$ docker-compose push
# and optionally:
$ docker logout
最后,以下是一些评论,以澄清与您的问题相关的一些细节:
在您的示例会话中
$ docker build -f someDockerfile -t some . # with "." as context build path $ docker tag some …/some $ docker push …/some
some
是一个临时图像名称(不是容器),因此似乎没有必要:您也可以运行以下命令,结果相同。$ docker build -f someDockerfile -t …/some . $ docker push …/some
您的
docker-compose.yml
示例包含以下行:image: some:<docker_hub_server>/some
实际上,图像标签可以包含
:
指定版本,但不能这样(应该是后缀)。例如,您可以标记图像user/some:1.0
或user/some:latest
,按照惯例,后一个示例user/some:latest
承认user/some
它是一个较短的等效名称。请注意,图像标签的完整语法是
registry.name:port/user/project:version
where
registry.name
应该是所需 Docker 注册表的域名或主机名(如果省略,它将默认为 Docker Hub)。官方文档的那个页面中提到了这一点。
因此,例如,如果您使用 Quay Docker 注册表,则图像标签可以是
quay.io/user/some:latest
或更简洁quay.io/user/some
。
推荐阅读
- excel - 在第二个空格后删除
- fabricjs - Fabric Js Image blend过滤和更改Image src问题
- google-apps-script - 如何更改具有已知任务和任务列表 ID 的任务的参数
- django - 找不到启动新项目的命令
- swift - 如何在 App Delegate 中使控制器独立?
- python - Pygame 窗口关闭,但程序在退出时仍挂起(Mac)
- c++ - QT 上下文菜单未与光标对齐
- d3.js - 条形图未在 SVG 中显示
- javascript - Javascript Calculator - 如何有效地对具有相同类的按钮进行编程而不会出错?
- ruby-on-rails - 从数据库中删除整个条目