#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. Я сейчас ни для чего их не использую. Что вы имеете в виду, должно быть обходным путем?