Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save esebastian/9531a0245b51179fe1220c218d3d8127 to your computer and use it in GitHub Desktop.
Save esebastian/9531a0245b51179fe1220c218d3d8127 to your computer and use it in GitHub Desktop.
Consul Workshop
Valencia DevOps 2016-04-19
Omar
Consul and consul-template
https://hub.docker.com/_/ruby/
progrium/consul
gliderlabs/registrator
HOW TO
SET IP
DOCKER_IP=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1 | grep -v 10.)
RUN consul server
docker run -d -d -h dev -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 53:53 -p 53:53/udp progrium/consul -server -advertise $DOCKER_IP -bootstrap-expect 1
RUN REGISTRATOR
docker run -t -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip $DOCKER_IP consul://$DOCKER_IP:8500 -bootstrap
RUN RACK
docker run --dns 172.17.0.2 -e SERVICE_NAME=rack1 -e SERVICE_TAGS=www -e PORT=83 -p 83:83 -d ruby
RUN HAPROXY
docker run -e CONSUL_HTTP_ADDR=162.243.206.218:8500 -e SERVICE_NAME=www --dns 172.17.0.2 -p 8000:8000 -ti 56a68a919f51
DOCKER FILES
RACK ->
FROM ruby
ENV PORT 8080
run curl https://gist.githubusercontent.com/pollosp/1ebd781f01e95b33e869/raw/9c65fdc75509d4d1d54617b19cb7d15d5a8961ea/dockerfile -o /mnt/rackup.sh
run chmod +x /mnt/rackup.sh
ENTRYPOINT /mnt/rackup.sh
HAPROXY ->
FROM alpine
MAINTAINER Ilkka Anttonen version: 0.3
RUN apk --update add haproxy wget unzip curl
RUN ( wget --no-check-certificate https://releases.hashicorp.com/consul-template/0.12.2/consul-template_0.12.2_linux_amd64.zip -O /tmp/consul_template.zip && cd /tmp && unzip consul_template.zip && mv consul-template /usr/bin && rm -rf /tmp/* )
COPY haproxy.json /tmp/haproxy.json
COPY haproxy.ctmpl /tmp/haproxy.ctmpl
CMD ["consul-template", "-config=/tmp/haproxy.json"]
OTHER REQUIRED FILES
haproxy.json
template {
source = "/tmp/haproxy.ctmpl"
destination = "/etc/haproxy/haproxy.cfg"
command = "haproxy -f /etc/haproxy/haproxy.cfg -sf $(pidof haproxy) &"
}
haproxy.ctmpl
global
daemon
defaults
mode http
timeout connect 5000
timeout client 50000
timeout server 50000
option http-server-close
balance roundrobin
frontend http
bind :8000
default_backend app_pool
backend app_pool
{{range $c,$d:=service "rack1"}}
server {{.Node}}-{{$c}} {{.Address}}:{{.Port}} check
{{end}}
HELPERS
docker images
docker ps
docker kill
curl localhost:8500/v1/catalog/service/rack1
docker exec -it [container-id] bash
docker inspect <container id>
THINGS TO TRY
⁃ https://github.com/containous/traefik
⁃ https://github.com/WeAreFarmGeek/diplomat
Resources
⁃ http://www.maori.geek.nz/scalable_architecture_dr_con_docker_registrator_consul_nginx/
⁃ http://sirile.github.io/2015/05/18/using-haproxy-and-consul-for-dynamic-service-discovery-on-docker.html#running-the-haproxy
⁃ http://sirile.github.io/2015/05/18/using-haproxy-and-consul-for-dynamic-service-discovery-on-docker.html
-----------------
SESSION:
root@docker-512mb-ams2-01:~# mkdir docker
# creamos contenedor rack
root@docker-512mb-ams2-01:~# mkdir rack
root@docker-512mb-ams2-01:~# cd rack/
root@docker-512mb-ams2-01:~/rack# DOCKER_IP=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1 | grep -v 10.)
root@docker-512mb-ams2-01:~/rack# vim Dockerfile
root@docker-512mb-ams2-01:~/rack# docker build -t rack .
# root@docker-512mb-ams2-01:~/rack# docker run --dns 172.17.0.2 -e SERVICE_NAME=rack1 -e SERVICE_TAGS=www -e PORT=83 -p 83:83 -d rack
# teníamos que haber arrancado consul antes
root@docker-512mb-ams2-01:~/rack# docker run -e SERVICE_NAME=rack1 -e SERVICE_TAGS=www -e PORT=83 -p 83:83
root@a21ab4d86110:/# ps aux
root@docker-512mb-ams2-01:~/rack# docker kill boring_williams
# corremos consul
root@docker-512mb-ams2-01:~/rack# cd ..
root@docker-512mb-ams2-01:~# mkdir consul
root@docker-512mb-ams2-01:~# cd consul
root@docker-512mb-ams2-01:~/consul# docker run -d -d -h dev -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 53:53 -p 53:53/udp progrium/consul -server -advertise $DOCKER_IP -bootstrap-expect 1
# vamos a la ip publica del droplet al puerto 8500 en el navegador
# corremos registrator
root@docker-512mb-ams2-01:~/consul# cd ..
root@docker-512mb-ams2-01:~# mkdir registrator
root@docker-512mb-ams2-01:~# cd registrator/
root@docker-512mb-ams2-01:~/registrator# docker run -t -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip $DOCKER_IP consul://$DOCKER_IP:8500 -bootstrap
# opción: correr el registrator en un screen para poder ver los logs
# averiguamos la ip del consul para referenciarlo como dns en el rack
root@docker-512mb-ams2-01:~/consul# docker exec -t ifconfig
# corremos el rack
root@docker-512mb-ams2-01:~/consul# docker run --dns 172.17.0.2 -e SERVICE_NAME=rack1 -e SERVICE_TAGS=www -e PORT=83 -p 83:83 -d rack
# comprobamos los registros dns de los servicios en el consul
root@docker-512mb-ams2-01:~/consul# dig rack1.service.consul @172.17.0.2 SRV
# creamos otro rack, con el mismo nombre de servicio
root@docker-512mb-ams2-01:~/consul# docker run --dns 172.17.0.2 -e SERVICE_NAME=rack1 -e SERVICE_TAGS=www -e PORT=84 -p 84:84 -d rack && dig rack2.service.consul @172.17.0.2 SRV
# levantamos el haproxy
root@docker-512mb-ams2-01:~/consul# cd ..
root@docker-512mb-ams2-01:~# mkdir haproxy
root@docker-512mb-ams2-01:~# vim Dockerfile
root@docker-512mb-ams2-01:~# vim haproxy.json
root@docker-512mb-ams2-01:~# vim haproxy.ctmpl
root@docker-512mb-ams2-01:~# docker build -t haproxy .
root@docker-512mb-ams2-01:~# docker run -e CONSUL_HTTP_ADDR=<public_ip_droplet>:8500 -e SERVICE_NAME=haproxy --dns 172.17.0.2 -p 8000:8000 -t haproxy
# luego vamos a la dirección IP pública puerto 8000 y al ir recargando vamos viendo como va cambiando el containerId
# podemos ir creando más en puertos distintos y vamos viendo como el proxy los va incluyendo automáticamente
# con más 'docker run --dns 172.17.0.2 -e SERVICE_NAME=rack1 -e SERVICE_TAGS=www -e PORT=<port> -p <port>:<port> -d rack'
# matar un contenedor: docker kill a5e691f4d4bb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment