docker -compose - COMPOSE_PROJECT_NAME, DockerHub и «имя службы». Как это использовать? - PullRequest
0 голосов
/ 29 мая 2020

Я использую 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

Теперь для pu sh этих изображений в 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?

Спасибо

1 Ответ

0 голосов
/ 29 мая 2020

В этом контексте обычно используются фиксированные имена изображений. Имя опубликованного изображения не должно зависеть от деталей указанного c файла 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) или если по какой-либо причине вам нужно поместить sh его в несколько репозиториев (оба Docker Hub и Amazon ECR).

...