我有一些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
中复制它。我尝试了一些方法,但是这一方法似乎很有效(但当然没有用):
docker-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
关于如何标记和推送容器的任何想法?
p.s .:我知道这不是docker-compose
的使用方式,但是我也知道这是可能的,并且符合我的需求。
答案 0 :(得分:3)
我已经在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
(在这里,如果您不使用Docker Hub,而是使用另一个Docker注册表,例如user/project-1
,则应将registry.name/user/project-1
替换为quay.io/user/project-1
。)
this page of the docker-compose documentation中描述了此处涉及的各个字段(build:
,context:
等)。
上面的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
其中registry.name
应该是所需Docker注册表的域名或主机名(如果省略,它将默认为Docker Hub)。
这在that page of the official documentation中有所提及。
例如,如果您使用Quay Docker注册表,则图像标签可能是quay.io/user/some:latest
或更简洁的quay.io/user/some
。