Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kaiyou/docker-jinja
Dynamic configuration files based on running containers with Jinja templating
https://github.com/kaiyou/docker-jinja
Last synced: 5 days ago
JSON representation
Dynamic configuration files based on running containers with Jinja templating
- Host: GitHub
- URL: https://github.com/kaiyou/docker-jinja
- Owner: kaiyou
- Created: 2015-09-29T18:15:52.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-09-08T13:34:20.000Z (about 6 years ago)
- Last Synced: 2024-08-02T12:48:03.607Z (3 months ago)
- Language: Python
- Size: 10.7 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-starred - kaiyou/docker-jinja - Dynamic configuration files based on running containers with Jinja templating (others)
README
Jinja configuration templates for Docker
========================================*Warning: this script is still an early version and should only be used
for production with great care and much testing. For instance, exceptions
are not handled yet and the container will crash in many cases.***Security warning: this script is mostly intended for devops under the
asumption that templates are managed with the same security policy as the
script itself. The ``utils`` module that is passed to the Jinja renderer
makes executing arbitrary code from the template a piece of cake.**Introduction
------------This project is based on the awesome ``tiller`` principle and the amazing
``docker-gen`` by jwilder. It ships as a Docker containers that listens
on the Docker socket for specific events then walk through a directory
and renders each configuration file through the Jinja templating engine.This behavior can easily be leveraged to dynamically reconfigure other
Docker containers or hosts to adapt to changing contexts. For instance :- run a dynamic DNS server replying to Docker container names ;
- run a dynamic Web reverse proxy (just like ``jwilder/nginx-proxy`` does) ;
- run a dynamic [whatever] reverse-proxy ;
- dynamically monitor all containers, build Web pages, or pour coffee based
on the list and configuration of running containers.DNS Resolver for containers
---------------------------Simply put the following hosts file template inside your source directory:
127.0.0.1 localhost
{% for container in containers %}
{{ container["NetworkSettings"]["IPAddress"] }} {{ container["Name"][1:] }}
{% endfor %}Run the configuration parser:
$ docker run -d --name=config-parser -t \
-v /path/to/src:/src \
-v /path/to/dst:/dst \
kaiyou/docker-jinja -n dnsmasqThen run the appropriate dnsmasq container:
$ docker run --name=dnsmasq \
-v /path/to/dst/hosts:/hosts \
-p 53:53/udp \
yourfavourite/dnsmasq --no-resolv --no-hosts --addn-hosts=/hostsYou may now query your containers:
$ dig A dnsmasq @127.0.0.1
;; QUESTION SECTION:
;dnsmasq. IN A;; ANSWER SECTION:
dnsmasq. 0 IN A 10.0.0.2Dynamic reverse proxy
---------------------The following configuration mimics the dynamic behavior of ``jwilder/nginx-proxy``.
{% for container in containers %}
{% set env = utils.get_env(container) %}
{% set hosts = env.get("VIRTUAL_HOST", "").split(",") %}{% if hosts[0] %}
upstream {{ container["Id"] }} {
server {{ container["NetworkSettings"]["IPAddress"] }}:{{ port }}:80;
}{% for host in hosts %}
server {
server_name {{ host }};
listen [::]:80;location / {
proxy_pass http://{{ container["Id"] }};
}
}
{% endfor %}
{% endif %}
{% endfor %}