Как «динамизировать» Dockerfile / Docker Compose? - PullRequest
0 голосов
/ 22 сентября 2018

Я докеризирую устаревший PHP-проект.Я хотел бы включить Xdebug в среде разработки, и мой Dockerfile копирует предварительно встроенный php.ini в контейнер.

Из-за некоторых проблем с сетью у нас должно быть xdebug.remote_connect_back = 0 в Mac OS X (и соответствующее xdebug.remote_host = docker.for.mac.localhost) и xdebug.remote_connect_back = 1 в Linux.

Возможно ли получить текущий тип ОС в Dockerfile / Docker Compose для копирования php.ini, соответствующего хост-ОС?

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

Используйте volumes , описанные здесь в docker-compose.yml.Создайте php.linux.ini и php.mac.ini в папке config (или где-либо еще) и сопоставьте один из них с контейнером:

services:
  php:
    image: php
    volumes:
      - ./config/php.linux.ini:/etc/php.ini #or wherever the config is

Конечно, вашим пользователям придется вручную изменить php.linux.ini на php.mac.ini, но это одноразовое ручное изменение.

0 голосов
/ 24 сентября 2018

Я решил использовать Docker Compose для чтения файлов .env.Весь рабочий процесс выглядит следующим образом:

  • создать .env.sample файл со всеми закомментированными строками (извините, не удалось правильно отобразить закомментированные строки) : OS=windows OS=linux OS=mac
  • игнорировать .env файл, добавив /.env строку к .gitignore файлу

  • скопировать образец файла с $ cp .env.sample .env и оставить без комментариев только одну строку, соответствующуюв вашу ОС

  • переместите относящийся к ОС раздел Xdebug php.ini в отдельный файл с именами, такими как xdebug-mac.ini, xdebug-windows.ini, xdebug-linux.ini и т. д.

  • добавить в раздел docker-compose.yml args к выбранной услуге со значением, таким как - OS=${OS}

  • в соответствующих Dockerfile добавить строки: ARG OS=${OS} COPY ./xdebug-${OS}.ini /usr/local/etc/php/conf.g/

Значение ОС, указанное в .env, будет расширено во время создания образа

  • выполнить $ docker-compose up -d --build, чтобы создать образ и запустить контейнер

  • примите все ваши изменения, чтобы ваши коллеги правильно установили Xdebug на любой платформе;не забудьте сказать им, чтобы они сделали свой собственный экземпляр .env файла из шаблона

0 голосов
/ 22 сентября 2018

Эта информация недоступна (и не должна) быть доступной во время создания образа.Тот же образ на основе Linux может быть запущен на собственном Linux, на виртуальной машине Linux на Mac (а затем на виртуальной машине Docker Machine или на скрытой виртуальной машине, предоставленной Docker для Mac), виртуальной машине Linux на Windows или даже на виртуальной машине Linux на Linuxнезависимо от того, где он был изначально построен.

Конфигурация, такая как имена хостов, должна предоставляться во время выполнения контейнера.Переменные среды - это типичный способ сделать это, или вы можете использовать механизм томов Docker для отправки файлов конфигурации с хоста.

Если ваша проблема связана только с отладкой вашего приложения, выВы также можете настроить полную среду разработки на своем хосте и встроить в свой образ только то, что нужно для его запуска в более производственной среде.

...