docker-compose-COMPOSE_PROJECT_NAME,DockerHub和“服务名称”。如何使用?

问题描述 投票:0回答:1

我正在使用docker-compose构建自定义的nginxphp图像,然后将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_nginxmyaccount/myapp_php-fpm

2)是否有一个变量来获取“服务名称”以检索名称nginxphp-fpm?例如,在docker-compose.yml文件中,我可以设置:image: myaccount/${COMPOSE_PROJECT_NAME}_<service_name>然后如果我将“服务名称”从nginx更改为nginx2,则图像将自动为myaccount/myapp_nginx2

3)是否可以重命名用docker-compose生成的图像,只允许push

谢谢

docker docker-compose tags
1个回答
0
投票

您通常会在这种情况下使用固定的图像名称。发布的图像名称不应取决于启动它的特定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 tagdocker push在Compose之外的图像。如果希望图像具有多个标签(例如,日期戳和latest),或者由于某种原因需要将其推送到多个存储库(Docker Hub和Amazon ECR),则也需要执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.