bootstrapping containers with confd
-
Upload
mrichardson -
Category
Technology
-
view
2.484 -
download
2
Transcript of bootstrapping containers with confd
![Page 1: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/1.jpg)
Bootstrapping containers with
confd
Michael Richardson @m_richo
![Page 2: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/2.jpg)
Who’s heard of
![Page 3: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/3.jpg)
Common methods for configuring containers
![Page 4: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/4.jpg)
Common methods for configuring containers
1.Environment variables2.Data volumes3.External Systems
![Page 5: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/5.jpg)
1. Environment variables
![Page 6: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/6.jpg)
1. Environment variables
docker run -d --hostname my-rabbit \--name some-rabbit \-e RABBITMQ_DEFAULT_USER=user \-e RABBITMQ_DEFAULT_PASS=password \-e RABBITMQ_DEFAULT_VHOST=my_vhost \rabbitmq:3-management
![Page 7: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/7.jpg)
1. Environment variables
docker run -d --hostname my-rabbit \--name some-rabbit \-e RABBITMQ_DEFAULT_USER=user \-e RABBITMQ_DEFAULT_PASS=password \-e RABBITMQ_DEFAULT_VHOST=my_vhost \rabbitmq:3-management
![Page 8: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/8.jpg)
1. Environment variables
• super easy to set
• Most applications are configured by config files rather than env vars.
![Page 9: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/9.jpg)
2. Data volumes
![Page 10: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/10.jpg)
2. Data volumesdocker run -d \--name some-nginx \-v /some/nginx.conf:/etc/nginx/nginx.conf:ro nginx
![Page 11: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/11.jpg)
2. Data volumesdocker run -d \--name some-nginx \-v /some/nginx.conf:/etc/nginx/nginx.conf:ro nginx
![Page 12: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/12.jpg)
2. Data volumes• easily pass any configuration files
from docker host to containers.
• Doesn’t scale too well
![Page 13: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/13.jpg)
3. External Systems
![Page 14: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/14.jpg)
3. External Systems
![Page 15: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/15.jpg)
3. External Systems
• Strong feature list and benefits
• More complexity
![Page 16: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/16.jpg)
What do I want?
![Page 17: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/17.jpg)
What do I want?
Simple method to set config files when
bootstrapping containers
![Page 18: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/18.jpg)
What do I want?
Simple method to set config files when
bootstrapping containers
![Page 19: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/19.jpg)
Say hi to
confd
![Page 20: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/20.jpg)
confdUses templates and data to render local configuration files.
https://github.com/kelseyhightower/confd
![Page 21: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/21.jpg)
confdSource of data• etcd• consul• dynamodb• Redis• Zookeeper• environment variables
![Page 22: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/22.jpg)
confdSource of data• etcd• consul• dynamodb• Redis• Zookeeper• environment variables
![Page 23: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/23.jpg)
Confd exampleconfd Nginx template /etc/confd/templates/nginx.conf.tmpl
server { server_name {{ getenv "proxy_domain" }}; location / { proxy_pass http://{{ getenv "backend_host" }}; proxy_redirect off; }}
![Page 24: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/24.jpg)
Confd exampleconfd Nginx config/etc/confd/conf.d/nginx.conf.toml
[template]src = "proxy.conf.tmpl”dest = "/etc/nginx/conf.d/proxy.conf”
![Page 25: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/25.jpg)
Confd example$ export proxy_domain=mydomain$ export backend_host=www.mricho.com$ /usr/local/bin/confd -onetime -backend env
$ cat /etc/nginx/conf.d/proxy.confserver { server_name mydomain; location / { proxy_pass http://www.mricho.com; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
![Page 26: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/26.jpg)
Confd example$ export proxy_domain=mydomain$ export backend_host=www.mricho.com$ /usr/local/bin/confd -onetime -backend env
$ cat /etc/nginx/conf.d/proxy.confserver { server_name mydomain; location / { proxy_pass http://www.mricho.com; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
![Page 27: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/27.jpg)
Confd appied to containers
![Page 28: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/28.jpg)
Confd appied to containers1. Install confd binary to docker images (Dockerfile)2. Add confd templates and config to docker images (Dockerfile)3. Create a bootstrap script for your container at runtime
![Page 29: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/29.jpg)
Confd appied to containers1. Install confd binary to docker images (Dockerfile)2. Add confd templates and config to docker images (Dockerfile)3. Create a bootstrap script for your container at runtime
#!/bin/bashset -e export proxy_domain=${proxy_domain:-$HOSTNAME}test $backend_host
/usr/local/bin/confd -onetime -backend env
echo "Starting Nginx”exec /usr/sbin/nginx -c /etc/nginx/nginx.conf
![Page 30: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/30.jpg)
Confd appied to containers1. Install confd binary to docker images (Dockerfile)2. Add confd templates and config to docker images (Dockerfile)3. Create a bootstrap script for your container at runtime4. Run a container
docker run -it -p 80:80 \-e proxy_domain=mydomain \-e backend_host=www.mricho.com \confd-test
![Page 31: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/31.jpg)
More than ‘strings’
![Page 32: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/32.jpg)
More than ‘strings’upstream backend_hosts {{{ $nodes := split (getenv "app_servers") ":" }}{{range $nodes}} server {{.}};{{end}}}
app_servers="myapp01.local:myapp02.local:myapp03.local:myapp04.local"
upstream backend_hosts { server myapp01.local; server myapp02.local; server myapp03.local; server myapp04.local;}
![Page 33: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/33.jpg)
confd
Configure container config files at runtime
with environment variables
![Page 34: bootstrapping containers with confd](https://reader034.fdocuments.us/reader034/viewer/2022051520/589f77a21a28abbf2e8b65fd/html5/thumbnails/34.jpg)
THANKSLinkshttps://github.com/kelseyhightower/confdhttp://www.mricho.com/confd-and-docker-separating-config-and-code-for-containers/https://github.com/m-richo/docker-confd-example
Michael Richardson - @m_richo