我正在使用docker-compose
构建自定义的nginx
和php
图像,然后将push
它生成到DockeHub。
我正在COMPOSE_PROJECT_NAME
文件中使用.env
设置前缀图像名称:
COMPOSE_PROJECT_NAME=myapp
[docker-compose.yml
类似于:
version: '3'
services:
php-fpm:
build:
context: ./php-fpm
args:
.....
volumes:
.....
expose:
.....
nginx:
build:
context: ./nginx
args:
.....
volumes:
.....
port:
.....
正在运行docker-compose up -d
的图像名称是:
myapp_nginx
myapp_php-fpm
容器名称是:
myapp_nginx_1
myapp_php-fpm_1
现在,要将这些图像推送到DocekeHub,我需要添加DockerHub“ account”后缀来更改图像名称:
myaccount/myapp_nginx
myaccount/myapp_php-fpm
为解决此问题,我在docker-compose.yml
中添加了“图像”选项:
version: '3'
services:
php-fpm:
build:
context: ./php-fpm
args:
.....
volumes:
.....
expose:
.....
image: myaccount/${COMPOSE_PROJECT_NAME}_php-fpm
nginx:
build:
context: ./nginx
args:
.....
volumes:
.....
port:
.....
image: myaccount/${COMPOSE_PROJECT_NAME}_nginx
现在运行docker-compose push
,图像被推送到DockerHub。
好,我的问题是:
1)是否可以将DockerHub帐户名myaccout
插入COMPOSE_PROJECT_NAME
变量中?类似于:COMPOSE_PROJECT_NAME=myaccount/myapp
自动创建图像名称,如:myaccount/myapp_nginx
和myaccount/myapp_php-fpm
?
2)是否有一个变量来获取“服务名称”以检索名称nginx
或php-fpm
?例如,在docker-compose.yml
文件中,我可以设置:image: myaccount/${COMPOSE_PROJECT_NAME}_<service_name>
然后如果我将“服务名称”从nginx
更改为nginx2
,则图像将自动为myaccount/myapp_nginx2
3)是否可以重命名用docker-compose
生成的图像,只允许push
?
谢谢
您通常会在这种情况下使用固定的图像名称。发布的图像名称不应取决于启动它的特定Compose文件的详细信息。
version: '3'
services:
nginx:
build: ./nginx
image: myaccount/nginx # no project name
假设您打算在不同的系统上运行相同的设置。它安装了Docker和Compose,但没有您的应用程序源代码。您应该能够在其中复制docker-compose.yml
文件,删除build:
行,然后运行相同的操作。目录是project
还是other
都无关紧要,并且Compose设置实际上是将服务命名为proxy
而不是nginx
也无关紧要;您将使用相同的image:
来引用它。
# COMPOSE_PROJECT_NAME=other
version: '3'
services:
proxy:
image: myaccount/nginx # same image as above
如果对Compose产生的名称不满意,可以手动docker tag
和docker push
在Compose之外的图像。如果希望图像具有多个标签(例如,日期戳和latest
),或者由于某种原因需要将其推送到多个存储库(Docker Hub和Amazon ECR),则也需要执行此操作。