Bir onceki yazımda nginx i reverse proxy olarak ayarlayarak 80 portundan birden çok docker konteyner yayınlamak üzerine yazmıştım. Simdi ise HaProxy kullanarak biraz daha elle ayarlama yaparak bu işlemi gerçekleştireceğiz. Bunu için azure üzerinde core os yüklü bir vm kullanacağım. ilk başta sudo -i diyerek root hakkımızı alıyoruz.
bu tatlı spiderman alıntısından sonra root yetkimi alıp devam ediyoruz.
Draw.io ile çizdim ancak biraz kötü oldu. Özetle anlatmak istediğim bir vm içerisinde web site sayımız kadar docker konteyner sahibiz. birde proxy serverimiz. tüm istekleri dinleyip ilgili servere yönlendirecek. Öncelikle bir ubuntu vm olusturup içerisine HaProxy Kuracağız.
Geldi sıra sitelerimiz için vm olustrumaya site1 için tutum/hello-world site 2 için wordpress kuracağım.
# docker run -d -name site1 tutum/hello-world
# docker run -d -name site2 tutum/wordpress
# docker inspect -f “{{.NetworkSettings.IPAddress}}” site1
# docker inspect -f “{{.NetworkSettings.IPAddress}}” site1
Diyerek çıkan ip adresilerini not ediyoruz.
Sıra geldi haproxy kurmaya. Bu gelen istekleri ilgili containerlere dağıtan notmalde daha bir çok işlevi olan reverse proxy serverimiz.
# docker run –name haproxy -p 80:80 -i -t ubuntu
açılan container e bağlanınca
#apt-get install haproxy
ile haproxy kuruyoruz. Kurulum bitince
# vi /etc/haproxy.cfg
bir config dosyası olusturuyoruz
global
daemon
maxconn 4096defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000msfrontend http-in
bind *:80
acl _site1 hdr_end(host) -i site1.com
acl _site2 hdr_end(host) -i site2.netuse_backend site1 if _site1
use_backend site2 if _site2backend site1
balance roundrobin
option httpclose
option forwardfor
server s2 172.17.0.12:80 maxconn 32 //yukardaki komut ile cıktı alıp note ettiiğimiz ip adresleribackend site2
balance roundrobin
option httpclose
option forwardfor
server s1 172.17.0.11:80 maxconn 32listen admin
bind 127.0.0.1:80
stats enable
Ardından vi kaydedip kapatip ( :wq ile ) ardından
# sudo /usr/sbin/haproxy -f /etc/haproxy.cfg -D -p /var/run/haproxy.pid
# exit
# docker start haproxy
(docker ps dediğigimizde listede yoksa) Aktif edip konteynerdan çıkıp haproxy isimli kontayner tekrar başlatıyoruz.
Ardından site1.com ve site2.com için dns serverimizden (ki ben cloudflare kullanıyorum ve tavsiye ederim) a kaydı girmeniz yeterli. böylelikle tüm uygulamaları birbirinden izole etmiş. Bunu yaparken performanstan bir kayip yaşamadan coreos ve docker ile mis gibi yaptık. üstelik ister bir site için php myadmin diğeri için ruby on rail kurabiliriz. hatta asp.net bile çalıştırabiliriz (bakınız asp.net on docker)
kaynak:http://samos-it.com/posts/docker-multi-website-single-ip-host-haproxy.html
kaynak2:http://oskarhane.com/haproxy-as-a-static-reverse-proxy-for-docker-containers/
Bu makale tamamen kodları anlatırken deneyerek yazılmıştır. Yazıldığı tarihte coreos (stable) ve docker 1.5.0 için sorunsuz çalışmaktadir. (not azuredan vm olustururken portları açmayı unutmayın)
Bir sorunuz olursa çekinmeden sorunuz.