Not*_*bby 4 docker docker-compose
I have a few docker containers that I try to sync with docker-compose
(currently are being run by bash scripts). I'm looking for a way to tag and push them to our ec2 based dockerhub (private server).
Using simply docker
we did something like this (for each container):
$ docker build -f someDockerfile -t some
$ docker tag some <docker_hub_server>/some
$ docker push <docker_hub_server>/some
Run Code Online (Sandbox Code Playgroud)
I'm trying to replicate this in docker-compose
. I tried a few things but this one seems close to working (but didn't work of course):
docker-compose.yml:
version: '3'
services:
some:
container_name:some
image: some:<docker_hub_server>/some
Run Code Online (Sandbox Code Playgroud)
But when i run:
$ docker-compose push
Run Code Online (Sandbox Code Playgroud)
I get:
Pushing some (base:<docker_hub_server>/base:latest)...
ERROR: invalid reference format
Run Code Online (Sandbox Code Playgroud)
Any ideas on how I can tag and push my containers?
p.s.: I know that this is not the way docker-compose
is meant to be used, but I also know it's possible and it fits my needs.
我在此PR中添加了该功能 ,一旦发布,您可以按如下方式使用它
docker compose tag --template "myregistry.local/myrepo/{{ .ServiceName }}:v1" --push
Run Code Online (Sandbox Code Playgroud)
请在此处阅读有关此功能的更多信息。
如果此功能需要很长时间才能从官方存储库中发布,我们将在我们的分叉中提供它
在我们的分支中发布:https://github.com/ElmCompany/compose/releases/tag/v2.2.3-2
我已经在Docker Hub上测试了这种方法,因此您应该能够通过以下配置和Shell会话实现所需的功能:
docker-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
Run Code Online (Sandbox Code Playgroud)
(在这里,如果您不使用Docker Hub而是使用另一个Docker注册表,则应替换user/project-1
为。)registry.name/user/project-1
quay.io/user/project-1
在docker-compose文档的此页面中描述了此处涉及的各个字段(build:
,context:
等等)。
docker-compose.yml
上面的文件假定您具有以下树(包括.gitignore和一些.dockerignore文件,以符合最佳实践):
.
??? build-1
? ??? Dockerfile
? ??? .dockerignore
??? build-2
? ??? Dockerfile
? ??? .dockerignore
??? docker-compose.yml
??? .gitignore
Run Code Online (Sandbox Code Playgroud)
然后在终端中执行以下操作:
$ 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
Run Code Online (Sandbox Code Playgroud)
最后,以下是一些注释,以澄清与您的问题有关的一些细节:
在您的示例会话中
$ docker build -f someDockerfile -t some . # with "." as context build path
$ docker tag some …/some
$ docker push …/some
Run Code Online (Sandbox Code Playgroud)
some
是一个临时的映像名称(不是容器),因此似乎没有必要:您也可以运行以下命令,并得到相同的结果。
$ docker build -f someDockerfile -t …/some .
$ docker push …/some
Run Code Online (Sandbox Code Playgroud)您的docker-compose.yml
示例包含以下行:
image: some:<docker_hub_server>/some
Run Code Online (Sandbox Code Playgroud)
实际上,图像标签可以包含:
指定版本,但不能以这种方式指定版本(应为后缀)。例如,您可以标记图像user/some:1.0
或user/some:latest
,并且按照惯例,后一个示例user/some:latest
承认user/some
为较短的等效名称。
请注意,图片标记的完整语法为
registry.name:port/user/project:version
Run Code Online (Sandbox Code Playgroud)
这里registry.name
应该是域名或所需的泊坞窗注册表的主机名(如果省略,则默认为泊坞集线器)。
官方文档的该页面中提到了这一点。
因此,例如,如果您使用Quay Docker注册表,则图像标签可能quay.io/user/some:latest
更简洁quay.io/user/some
。
归档时间: |
|
查看次数: |
4395 次 |
最近记录: |