Docker-составление тегов и нажатий - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть несколько док-контейнеров, которые я пытаюсь синхронизировать с docker-compose (в настоящее время они выполняются сценариями bash).Я ищу способ пометить и отправить их на наш докер-хаб на базе ec2 (частный сервер).

Используя просто 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

Любые идеи о том, как я могу пометить и протолкнуть свои контейнеры?

ps: я знаю, что этоне способ docker-compose предназначен для использования, но я также знаю, что это возможно, и это соответствует моим потребностям.

1 Ответ

0 голосов
/ 21 ноября 2018

Я проверил этот подход с Docker Hub, поэтому вы сможете достичь желаемого с помощью следующей конфигурации и сеанса оболочки:

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

(Здесь вы должны заменить user/project-1 на registry.name/user/project-1, если вы используете не Docker Hub, а другой реестр Docker, например, quay.io/user/project-1.)

Различные поля, используемые здесь (build:, context: и т. Д.) Описаны на этой странице документации docker-compose .

В приведенном выше файле 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).

    Это упомянуто на этой странице официальной документации .

    Так, например, если вы используете реестр Quay Docker, тег изображения может быть quay.io/user/some:latest или более кратко quay.io/user/some.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...