Создание и загрузка изображений в Docker Hub, как из Docker Compose?

#docker #docker-compose #docker-registry #dockerhub

#docker #docker-compose #docker-реестр #dockerhub

Вопрос:

Я работал в docker среде для разработки PHP и, наконец, заставил ее работать так, как мне нужно. Эта среда зависит от docker-compose конфигурации и выглядит следующим образом:

 version: '2'
services:
    php-apache:
        env_file:
          - dev_variables.env
        image: reynierpm/php55-dev
        build:
            context: .
            args:
                - PUID=1000
                - PGID=1000
        ports:
            - "80:80"
        extra_hosts:
            - "dockerhost:xxx.xxx.xxx.xxx"
        volumes:
            - ~/var/www:/var/www
 

Есть некоторые конфигурации, подобные extra_hosts и env-file это вызывает у меня некоторую головную боль. Почему? Потому что я не знаю, будет ли изображение работать при таких обстоятельствах.

Давайте скажем:

  • Я запустил docker-compose up -d , и изображение reynierpm/php55-dev с тегом latest было создано
  • У меня все работает так, как должно быть, потому что я устанавливаю правильные значения в docker-compose.yml файле
  • Я вошел в свою учетную запись и отправил изображение в репозиторий: docker push reynierpm/php55-dev

Что произойдет, если завтра вы клонируете репозиторий и попытаетесь запустить docker-compose up , но измените docker-compose.yml файл в соответствии с вашими настройками? Как ведет себя изображение в этом случае? Я имею в виду, имеет смысл создавать / загружать изображение в Docker Hub, если в любой момент, когда я запускаю команду docker-compose up , он будет снова собран из-за изменений в файле конфигурации?

Может быть, я завершаю неправильно, и за кулисами происходит какое-то волшебство, но мне нужно знать, правильно ли я это делаю

Комментарии:

1. Здравствуйте, вы решили свою проблему?

Ответ №1:

Если люди клонируют ваш репозиторий git и выполняют a docker-compose up -d , это фактически создаст новый образ. Если вы хотите, чтобы люди использовали ваше изображение только из docker hub, удалите раздел сборки docker-compose.yml и опубликуйте его на своей странице docker hub. Проверьте это, вы можете увидеть предлагаемый docker-compose.yml.

Просто вставьте это на свою страницу:

 version: '2'
services:
  php-apache:
    image: reynierpm/php55-dev
    ports:
      - "80:80"
    environment:
      DOCKERHOST: 'yourhostip'
      PHP_ERROR_REPORTING: 'E_ALL amp; ~E_DEPRECATED amp; ~E_NOTICE'
    volumes:
      - ~/var/www:/var/www
 

Если в вашем env_file есть только пара переменных, лучше показать их непосредственно в Dockerfile. Лучше заменить extra_hosts переменной среды и изменить в вашем php.ini или где бы вы ни использовали дополнительный хост на переменную:

 .....
xdebug.remote_host         = ${DOCKERHOST}
.....
 

Вы можете в своем Dockerfile определить значение по умолчанию для этой переменной:

 ENV DOCKERHOST=localhost
 

Надеюсь, это поможет

С уважением

Комментарии:

1. Я считаю, что использовать мое созданное изображение не будет работать, поскольку это изображение будет иметь настройки параметров для моего локального компьютера и не будет работать для других. Я прав?

2. Это зависит только от вашего файла Dockerfile и от того, как вы используете переменные среды. На самом деле в редких случаях значения переменных env используются для создания образа. Я не могу найти ваше репозиторий github в docker hub. Вы можете опубликовать здесь, чтобы посмотреть

3. Вот репозиторий в DockerHub , а вот в Github , дайте мне знать ваши мысли по этому поводу

4. На самом деле переменные среды используются в entrypoint, поэтому они не попадают в изображение. Аргументы PUID и PGID являются частью процесса сборки. Почему вам нужно указывать эти значения для создания пользователя docker? Для подключенных к хосту томов? Думаю, должен быть обходной путь

5. Я сейчас ни для чего их не использую. Что вы имеете в виду, должно быть обходным путем?