Sziasztok!
Egy kis ideje szenvedek már a dockerrel. Az lenne a célom, hogy a konténerek külön ip címet kapjanak amit a windows alól el is érek, tehát nem portokkal játszogatnék.
A linux hyper-v alól fut. Sokat vacakoltam, próbálkoztam mindenféle hálózati beállítással, de egyik esetben se sikerült külön ip címeken elérni a konténereket. Egymást se látták rendesen.
Végül próbaként megnéztem ezt linux alól. Ott minden varázslás nélkül működött minden. Olvasgattam is dockeres fórumokat ahol a linuxosok körberöhögték a windows-os meg mac-es felhasználókat, de csak most tapasztaltam konkrétan, hogy tényleg linux alatt megy jól.
Tud valaki valami megoldást a problémára? Gondolom itt az okozza a bajt, hogy beékelődik egy VM gép is a játékba, míg linux alatt nincs rá szükség.
- 449 megtekintés
Hozzászólások
Próbáltál létrehozni user defined bridge network-ot?
https://docs.docker.com/network/bridge/
- A hozzászóláshoz be kell jelentkezni
gondolom ezért nem
https://docs.docker.com/docker-for-windows/networking/#there-is-no-docker0-bridge-on-windows
de van valami régebbi komment, hogy windows alatt az ott létrejövő docker-es hálózatot kézzel piszkálva lehet valamit javítani rajta
https://forums.docker.com/t/bridge-with-docker-for-windows/30936/3
- A hozzászóláshoz be kell jelentkezni
Utánanézek majd, sokat próbálkoztam bridgekkel meg egyéb driverekkel, Hyper-v -s hálózattal, stb.
- A hozzászóláshoz be kell jelentkezni
Mit szeretnél a külön IP címekkel megoldani?
Éles rendszerről vagy fejlesztői környezetről van szó?
Utóbbi esetben én nginx proxy-t használok és local-ban felvett külön domain-eket.
- A hozzászóláshoz be kell jelentkezni
Fejlesztői környezetről lenne szó. Én is gondoltam erre amit írtál, csak kicsit nyakatekert egy megoldás lenne, mert rendszeresen frissíteni kell a proxy konténer alatt a domaineket és forward-okat. (ez mondjuk egyszerűbb ha egy git repóból kéri le mindig az init folyamán, van is ilyen rendszerem, csak akkor szopó ha épp nem érhető el a git repó)
Mondjuk eddig a konténerek között se sikerült megtalálni egymás ip-jét (pl egy apache szervert), bár valszeg én csináltam rosszul valamit.
- A hozzászóláshoz be kell jelentkezni
nem értem miért kellene mindig frissíteni, illetve hogy miért kellenek az ip-k továbbra is mikor az adott konténer neve alapján elérhetőek a szolgáltatások
pl. az nginx konténer alól a php-t az adott konténer neve alapján: "fastcgi_pass phpfpm7:9000;"
használsz docker-compose.yml fájlt?
- A hozzászóláshoz be kell jelentkezni
Egyeztessünk elsőnek, hogy tuti egy dologról beszélünk e.
Én arra gondoltam, hogy van egy proxy konténerem. 1.2.3.4 ip címmel ami müxik winfos alól is.
hosts alatt belövöm a domaineket az 1.2.3.4 -re. Azon belül pedig a domain alapján átirányítom a kérést egy másik konténerbe port-on keresztül.
Erre gondoltál te is?
- A hozzászóláshoz be kell jelentkezni
igen, erre gondoltam én is
ha a konténerek között kommunikálsz akkor hivatkozhatsz a nevükre az ip-k helyett
- A hozzászóláshoz be kell jelentkezni
Noh, de ehhez kell egy mapping, ami nálad az nginx alatt megy. Ha azt ki akarod bővíteni, akkor újra kell "forgatnod" az imagedat vagy kommitolsz egyet.
Nálam repo-ban vannak az image-k amiket mások is le tudnak tölteni. A cél, hogy rajtam kívül más kollégák is könnyedén lőhessenek be egy környezetet ami folyamatosan bővülhet, változhat.
Eddig erre a git-es megoldás volt a megfelelő. Pl egy konténerben az apache vhost-okat git-ből töltöm be az induláskor. Ezt lenne jó kiváltani. Ha bővültek a vhost-ok, csak a git-be kellett push-olni, nem kellett az image-t változtatni.
- A hozzászóláshoz be kell jelentkezni
igen, ha új projekt jön be, akkor lemásolom egy korábbi projekt nginx beállítását (1 fájl) és átírom benne a host-ot
majd "docker-compose build", de mivel a Dockerfile-ban a config fájlok konténerbe másolása a legvégén van így az előtte lévő dolgokat cache-ből tölti be és a teljes build lefut 2-3 másodperc alatt
értem amit írsz, de nekem fura hogy teljes image-eket teszel repóba fejlesztői környezetben
nálam a docker-es környezethez tartozó fájlok külön repo alatt vannak és az egyes projektek megint külön repóban
és a projects mappa gitignore-olva van
docker
- projects (.gitignore-olt, de így könnyen lehet hivatkozni rá a docker-compose.yml fájlban és mindenkinél egységes lesz)
- project1
- nginx
- config
- project1.conf
- Dockerfile
- .gitignore
- docker-compose.yml
nem tudom mennyire érthető így, illetve mennyire beszélünk ugyanarról :)
- A hozzászóláshoz be kell jelentkezni
Nálad mindig az aktuális fejlesztő létrehozza magának a konténert.
Az én esetemben ezt én teszem meg és a többi fejlesztő csak letölti és már futtatja is. Sajnos nem mindenki ért a dockerhez, vagy nem akar ilyenekkel foglalkozni, a cél, hogy tényleg 1 kattintással vagy pár paranccsal pillanatok alatt le lehessen húzni bármelyik fejlesztő gépére a környezetet és nem utolsó sorban teszt környezeteket is fel lehet majd így állítani belőle szervereken is.
- A hozzászóláshoz be kell jelentkezni
Igen, az én esetemben:
- lehúzza a "docker fejlesztői környezet" repot
- aztán futat "docker-compose build" -et (ez nyilván sokáig tarthat, de csak az első alkalommal)
- utána a project mappába lehúzza amivel dolgozik
- végül "docker-compose up"
Ez csak két docker parancs.
És a docker build-et csak akkor kell újra futtatnia ha változik valami a környezet kapcsán.
Éles környezetben, pl. kubernetes esetén nyilván már más a helyzet, mivel ott bele kell másolni a kódokat az image-be, mert az kerül deploy-olásra, de azt a Gitlab CI-ban elég jól meg lehet oldani. Ott az image-k tárolására a Gitlab Container Registry -t lehet használni.
Fejlesztői környezetben szerintem nem kell hogy így legyen. Ott volume-ként fel lehet csatolni a host gép bármelyik folderét.
Nekünk volt olyan image ami 7-800Mbyte -os lett a sok php vendor miatt, amit azért egy git repo-ba feltolni elég sok és felesleges, mivel a composer install -al leszedi mindenki a saját gépére.
De persze az egész projekt és csapat függő is, szóval nektek lehet úgy jó ahogy most van :)
- A hozzászóláshoz be kell jelentkezni
Félreértesz :)
A kód mappák nálunk is mountolva vannak, illetve van bash script ami lefuttatja az npm-et meg composert, ugyanígy a deploy folyamat alatt is.
Csak annyi a különbség, hogy nálad compose build van, nálunk pedig docker run :)
- A hozzászóláshoz be kell jelentkezni
Ok, akkor ezt jól megbeszéltük :)
- A hozzászóláshoz be kell jelentkezni