Fórum Root.cz

Hlavní témata => Software => Téma založeno: Fen 02. 08. 2017, 10:07:51

Název: Docker správa portů a mountů existujícího kontejneru
Přispěvatel: Fen 02. 08. 2017, 10:07:51
Ahoj, začal jsem se seznamovat s Dockerem a chtěl bych vědět, jestli je možné spravovat seznam portů a jejich přesměrování, stejně tak připojené adresáře a jejich přesměrování v již existujícím kontejneru? Uvedu případ užití, k čemu to chci použít: Z Debianu vytvořím kontejner, abych na něm provozoval nějakou webovou aplikaci.

sudo docker run -it -p 8080:80 -v /srv/www/:/var/www/ --name moje debian bash

Nainstaluju do něj Apache a aplikaci provozuji. Jenže za týden se rozmyslím a chci mít obsah stránek na /home/fen/Workspace/moje/ a už nechci port 8080, ale 8443 aby byl přesměrovaný na 443 do kontejneru.

Díval jsem se do nastavení ve /var/lib/docker a teoreticky by to šlo změnou konfigurace kontejneru, ale toho se obávám 1) úplně se v konfiguraci nevyznám 2) je to náchylné na chyby

Napadlo mě, že bych při každé takové změně udělal:

sudo docker commit moje-img2 a pak vytvořil nový kontejener z toho img příkazem run s novými přesměrováními, ale přijde mi to takové napřesruku.
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: Filip Jirsák 02. 08. 2017, 10:21:00
Ani jedno možné není. Postup, při kterém měníte kontejner, neodpovídá koncepci Dockeru. Váš postup by měl být takový, že si na základě toho Debianu vytvoříte nový obraz (buď deklarativně pomocí Dockerfile,nebo tak, že si vytvoříte kontejner,  v něm uděláte úpravy a pak jej commitnete do obrazu – pak ale musíte počítat s tím, že když budete chtít třeba povýšit verzi Debianu, budete muset ty úpravy dělat znova). Na základě toho obrazu pak vytvoříte a spustíte kontejner. Když budete chtít spustit kontejner s jinými parametry (porty, přípojné body), vytvoříte a spustíte ze stejného obrazu nový kontejner.
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: Mufasa 02. 08. 2017, 11:16:18
Este ako dodatok, nevyrabajte zbytocne koleso, apache imagov je dookola dost, ak sa vydate touto cestou (odporucam) pouzivajte verzie kontajneru a nie :latest
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: Fen 03. 08. 2017, 20:36:09
Ok, děkuji za odpovědi. To vytváření Dockerfile je naprd, když ještě přesně nevíte, co v systému budete dělat za změny. Ale řeším to tak, že dělám změny v kontejneru a průběžně si je kopíruju do Dockerfile. Ještě by to chtělo nějaký systém na správu těch run příkazů :) Ale asi není problém poznamenat si to třeba jako komentář do Dockerfile ;)

Dodatek: Děkuji za připomínku, kontejner potřebuji použít pro firmou upravený Wildfly. Příklad s Apachem jsem uvedl, abych zbytečně nezesložiťoval situaci a nezabíhal do podrobností.
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: Filip Jirsák 04. 08. 2017, 07:02:13
Ještě by to chtělo nějaký systém na správu těch run příkazů :) Ale asi není problém poznamenat si to třeba jako komentář do Dockerfile ;)
Můžete to napsat jako normální shell skript a pak jej jenom z Dockerfile spustit.
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: Kamil Podlešák 04. 08. 2017, 09:18:45
Ještě by to chtělo nějaký systém na správu těch run příkazů :) Ale asi není problém poznamenat si to třeba jako komentář do Dockerfile ;)
Můžete to napsat jako normální shell skript a pak jej jenom z Dockerfile spustit.
Tohle má navíc jednu zásadní výhodu v tom, že je to v Dockerfile jen jeden příkaz = jedna vrstva. A nebo nevýhodu, jak kdy :-)
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: restart 04. 08. 2017, 09:41:45
Tohle je standardni otazka pet vs cattle. Docker je proste cattle a na zaklade docker filu je uprava parametru jednodussi, nez upravovat a commitovat novej layer do stavajiciho image. Hlavne docker je z principu stateless, takze jakykoli upravy uvnitr beziciho kontejneru jsou vetisnou k nicemu.
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: shemale 05. 08. 2017, 12:29:39
Tohle má navíc jednu zásadní výhodu v tom, že je to v Dockerfile jen jeden příkaz = jedna vrstva
což není ale pravda - co příkaz v Dockerfile, to jedna vrstva. Takže záleží na tom, jak je Dockerfile napsaný.

Jinak dělat commity v Dockeru nedoporučuji. Je to k ničemu, resp. pokud změníte server, musíte se pak dostat do stejného stavu. Pokud už Vás něco nutí změnit nastavení v kontejneru, je lepší udělat kontejner nový - ale hlavně, je lepší o tom trochu přemýšlet a nedělat změny
Název: Re:Docker správa portů a mountů existujícího kontejneru
Přispěvatel: Ondrej 05. 08. 2017, 13:02:15
Ok, děkuji za odpovědi. To vytváření Dockerfile je naprd, když ještě přesně nevíte, co v systému budete dělat za změny. Ale řeším to tak, že dělám změny v kontejneru a průběžně si je kopíruju do Dockerfile. Ještě by to chtělo nějaký systém na správu těch run příkazů :) Ale asi není problém poznamenat si to třeba jako komentář do Dockerfile ;)

Dodatek: Děkuji za připomínku, kontejner potřebuji použít pro firmou upravený Wildfly. Příklad s Apachem jsem uvedl, abych zbytečně nezesložiťoval situaci a nezabíhal do podrobností.
Proto se dockerfile většinou píše takhle https://github.com/docker-library/python/blob/5d86c858d58f84b8dd1274ac61ac1c9c9ebc7739/3.6/alpine3.6/Dockerfile (aby bylo právě X příkazů v jedné vrstvě.)

A radím hlavně nedělej žádné prasárny alá commit atp. Dřív nebo později se ti to vymstí. Dockerfile má výhodu i v tom, že je zároveň dokumentační, čili víš co v kontejneru máš a když se pak po tobě bude v tom někdo hrabat, bude vědět co očekávat. Připojovat se do kontejneru a doinstalovávat balíky je přijatelné jen za účelem testování, jinak to vždy piš do dockerfile. Když kontejner ladíš, udělej si třeba co příkaz to vrstvu, aby si při každé změně nemusel kontejner sestavovat znova od začátku, pak to spoj do jednoho. Takhle se to běžně dělá.