Docker - HTTP(S) proxy pro více kontejnerů

JmJ

  • ****
  • 269
    • Zobrazit profil
Docker - HTTP(S) proxy pro více kontejnerů
« kdy: 12. 10. 2020, 22:34:54 »
Zdravim,

da se v dockeru resit situace, kdy mam rekneme 2 kontejnery s webserverem kdy jeden obsluhuje hosta x.neco.cz a druhy hosta y.neco.cz? Pro obe domenova jmena chci stejnou IP. Tedy ekvivalent virtual hostu v apachi, kdy kazdy virtual host ma svuj kontejner.

Tedy potrebuju neco, co prijme spojeni, zjisti, pro jakeho hosta http(s) komunikace je a preda ji patricnemu kontejneru.

a) chapu jak kontejnery funguji na obecne urovni, neznam presne detaily
b) celkem se orientuju v sitich
c) nemam temer zadne zkusenosti primo s dockerem

Chtel bych vedet aspon co mam hledat, tedy jak se takove funkcionalita jmenuje pokud vubec je. Cekal bych ze ano. Proste nejake nakopnuti, strucne vysvetleni funkce neuskodi. Diky :-)
« Poslední změna: 13. 10. 2020, 08:36:03 od Petr Krčmář »


Re:docker - http(s) proxy
« Odpověď #1 kdy: 12. 10. 2020, 22:48:49 »
1) vytvoris si docker sit, nazveme ji treba docker-proxy
2) tohle hodis na 80 a 443 https://github.com/nginx-proxy/nginx-proxy a bude to v te siti
3) kazdy ten web ma nginx kontejner ktery je v siti docker-proxy + ma ENV: VIRTUAL_HOST (plus par dalsi VIRTUAL_*** najdes v dokumentaci ty proxy z bodu 1)
4) v dokumentaci bodu 1) najdes jak to elegantne spojit s letsencrypt v kontejneru
Děkuji za možnost editace příspěvku.

Re:docker - http(s) proxy
« Odpověď #2 kdy: 12. 10. 2020, 22:50:17 »
Detaily poradim pouze v pripade, ze to valis pres docker-compose (mam tam i tu proxy protoze proste se mi zda lepsi zapisovat porty a volume do yml nez dlouhyho commandu jako parametry a zaroven nemam tak velky projekty abych uzivil kubernetes nebo AWS - ale to ty evidentne taky ne.
Děkuji za možnost editace příspěvku.

cjohn

Re:docker - http(s) proxy
« Odpověď #3 kdy: 12. 10. 2020, 23:38:26 »
V zasade chces reverse proxy. nginx je old school (rozumej znamy hlavne z non docker sveta), ale asi najpouzivanejsi. Novsi pristup by bol pouzit namiesto nginxu caddy/traefik/envoy/istio a pod. Pripadne pokrocilejsie docker orchestrations (swarm, k8s, cloud foundry, rancher) to maju viac-menej integrovane a nepotrebujes az tak riesit a manazovat reverse proxy osobitne.

Re:Docker - HTTP(S) proxy pro více kontejnerů
« Odpověď #4 kdy: 13. 10. 2020, 09:43:07 »
BTW nevim proc, ale pri lokalnim pouziti traefiku v dockeru mi sel pocitac do kolen. nginx-proxy uplne v pohode kdyz delalo to same (prekladat hostname asi pro 4 kontejnery v jednom projektu)
Děkuji za možnost editace příspěvku.


Jose D

  • *****
  • 575
    • Zobrazit profil
Re:Docker - HTTP(S) proxy pro více kontejnerů
« Odpověď #5 kdy: 13. 10. 2020, 12:34:46 »
mám tenhle setup, jedna z možností je:

systemd unita, co ti pustí haproxy v docker containeru:

Kód: [Vybrat]
[Unit]
Description=starts haproxy docker container
After=network.target

[Service]
Type=simple

# command is prepended by "-" so the return code is ignored..
ExecStartPre=-/usr/bin/docker rm haproxy_005
# bind to all IPs..:
ExecStart=/usr/bin/docker run --rm --publish=80:80 --publish=443:443 --name haproxy_005 -v /etc/haproxy:/usr/local/etc/haproxy:ro -v /etc/certbotcerts:/etc/certbotcerts:ro haproxy:2.2
StandardOutput=journal
TimeoutStartSec=60
Restart=always
RestartSec=60
SyslogIdentifier=haproxy-docker

[Install]
WantedBy=multi-user.target
#

a v /etc/haproxy/haproxy.cfg si nakonfíš front-endy, ACL, a backendy podle dokumentace a trafik pošleš tam, kam potřebuješ..
« Poslední změna: 13. 10. 2020, 12:37:47 od Jose D »