( persicsb | 2017. 12. 21., cs – 21:54 )

Az alapelv az, hogy egy image önmagában egy teljes egész, tartalmazza magát az alkalmazást, ami fut - többféle okból.

Egyrészt maga az image az nem az alkalmazások függőségeit csomagolja össze, hanem az egész alkalmazást.
De biztonsági okai is vannak ennek.
Például auditálás: egy image hash alapján mindig megmondható, hogy mi az, amit az image mint futtatható kódot tartalmaz.
Másrészt így kontrollálható a release folyamat: csak úgy kerülhet be futtatható kód az image-be, ha azt a megfelelő személy engedélyezte, és beépül az image-be, amúgy kívülről nem jöhet.

Szóval NE, ne szokj hozzá ahhoz a rossz szokáshoz, hogy a konténer futtatható kódot kap kívülről. Hiába vagy otthon, és ez egy one-man projekt, akkor sem. Az ilyen "otthon is jó volt, munkában is jó lesz" szokások azok, amik kerülendők. Szokj hozzá, hogy otthon is olyan kódot írsz, mintha élesben írnád. Pont azért, mert amúgy számodra ez egy éles kód, amikor felhasználod.

Amire a bind mount meg a volume való, az az , hogy konfigurációt kap a konténer olvasásra, illetve a perzisztens adatait (ha vannak ilyenek), akkor oda írhatja.

A konfiguráció az természetes, hogy jöjjön kívülről, ez alap. Így lehet ugyanazt a kódot teszt meg production környezetben is futtatni, anélkül, hogy az image-hez hozzá
kelljen nyúlni.

És nem kell leállni így:
1. a konténer elé teszel egy proxyt, ez lehet mondjuk HAproxy vagy nginx is.
2. Az image-t elkészíted, amíg a régi backend fut. Ehhez nem kell leállítani semmit.
3. Elindítod az új konténert egy új porton, megmondod a proxynak, hogy van egy új instance abból a szolgáltatásból az új porton, a proxy ezt értelmezi és máris ki tudja szolgálni a kéréseket az új backendből is, meg a régiből is.
4. Ezután megmondod a proxynak, hogy a régi szolgáltatás már nem él, majd leállítod a régi konténert.
5. Eztuán a proxy a kéréseket mindenképpen az új backend felé küldi
6. Kész, 0 downtime.

Ha minderre egy scriptet is írsz, akkor még gyorsabb az egész, észre sem lehet venni semmit kívülről.

https://www.haproxy.com/blog/dynamic-configuration-haproxy-runtime-api/
https://serverfault.com/questions/378581/nginx-config-reload-without-do…