Fórum Root.cz
Hlavní témata => Server => Téma založeno: JmJ 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 :-)
-
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
-
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.
-
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.
-
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)
-
mám tenhle setup, jedna z možností je:
systemd unita, co ti pustí haproxy v docker containeru:
[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š..