Путь, которым ты сейчас следуешь, кажется действительно хорошим, и я, вероятно, ничего бы не изменил.
Поскольку контейнер Docker имеет изолированную файловую систему, контейнеры обычно используют фиксированные «нормальные» пути файловой системы. Например, стандартное изображение nginx изобилует ссылками на /etc/nginx
в пространстве контейнера. Целесообразно рассматривать эти пути на стороне контейнера как часть внешнего интерфейса с изображением; вам следует относиться к пути /etc/nginx/nginx.conf
так же стабильно, как к параметру командной строки -g 'daemon off'
(вы не ожидаете, что этот путь будет меняться при обновлении образа).
Чтобы избежать повторения пути к файлу, вы можете использовать переменную Ansible . Это может быть более полезным, если у вас есть роль для запускаемого контейнера. Вы можете указать путь по умолчанию на стороне хоста и переопределить его в Playbook верхнего уровня или в командной строке. Это позволило бы вам написать сборник пьес для запуска контейнеров, например
- name: Copy nginx.conf
template:
src: nginx.conf.j2
dest: "{{ nginx_config_path }}/nginx.conf"
- name: Launch nginx
docker_container:
name: nginx
image: nginx
volumes:
- "{{ nginx_config_path }}:/etc/nginx"
. Обратите внимание, что эта проблема не особенно уникальна для Ansible. Объект kubernetes ConfigMap является наиболее близким к этому эквиваленту, и, как и то, что вы здесь описываете, это также правильный путь для вставки файлов конфигурации в контейнеры (контейнеры), но он по сути имеет ту же проблему, требуя три пары имен, чтобы соответствовать. Опять же, нет лучшего решения, чем пытаться использовать «переменную» или «константу» в той степени, в которой это позволяет ваша система оркестровки, и надеяться, что проблема будет обнаружена раньше, чем позже.
Можно использовать шаблоны согласно ниже для Управления входом в систему. Обратите внимание, что необходимо будет обеспечить собственные блоки проверки допустимости и т.д., если Вы сделаете это, но Вам разрешают намного больше свободы :)
Если Вы помещаете управление входом в систему в VS, то открываете поле контекста для него и нажимаете 'Convert to Template', Вы видите то, на что похожа стандартная реализация.
<asp:Login ... >
<LayoutTemplate>
<asp:TextBox ID="UserName" ... /> ...
<asp:TextBox ID="Password" ... /> ...
<asp:Button ID="LoginButton" ... />
</LayoutTemplate>
</asp:Login>