Bez dockeru ani ránu

Docker_(container_engine)_logo

V článu Docker server snadno a rychle, kde jsem shrnul jednoduchý způsob, jak rozchodit hlídané docker kontejnery za pár vteřin, jsem nezmínil, jak moc důležitou roli v mém vývoji samotný Docker hraje, proč by si měl získat i vás a taky proč by měl být Dockerfile či Docker Compoer (možná kromě node.js) nedílnou součástí všech repozitářů vašich projektů.

Nebudu tu rozebírat milionkrát omílané tutoriály s hello wordy. Spíš se zaměřím na pár jednoduchých poznámek a rad, které mě nakonec motivovali natolik, že jsem na dockeru začal stavět téměř všechno nové a připravil na něm také vývojové zázemí pro všechny aktivní stávající projekty u svých klientů.

Bylo nebylo…

Když jsem začal dělat pro první větší firmy a pracovat v prvních menších vývojových týmech, tak to vypadalo tak, že všichni měli vývojové prostření nainstalované na svém počítačích, tak jak to nějak vytušili z kódu. Reálně to nakonec vypadalo tak, že přišel nový člověk, který věděl, že děláme na PHP a MySQL a tak si to nějak rozchodil.

Když byl klient štědrý, tak zaplatil ještě nemovitému juniorovi licenci MAMP PRO a vše bylo téměř superrůžové. Téměř…

Výsledkem bylo, že jeden dělal na PHP verzi 5.6. Ti co tam byli dřív, tak ještě 5.4 a ty úplně nejčerstvější kousky by tam už měli třeba PHP 7… Ano. Velkým tajemstvím je mi to, proč se s tímto přístupem stále setkávám a ještě větším, proč to každý z nich je schopný obhajovat do úmoru, než aby šel s dobou a moderními ověřenými nástroji. Trochu mi to připomíná přístup důchodců „Za našich časů tyto věci nebyly a tak je nebudu používat ani já.“

Bohužel škody, které je schopný tento přístup napáchat, můžou být opravdu velké. Vzpomínám na situaci, kdy všichni vývojáři včetně mě vyvíjeli na PHP 5.6, zatímco na produkčním serveru bylo 5.4 (informace, kterou mi tak nějak zapomněli říct). Jelikož to byl eshop, který měl nějakých 2000 objednávek denně a denní obrat kolem 1.5 milionu, tak důsledky večerního uspěchaného RUČNÍHO OUTSOURSOVANÉHO buildu mohly a také občas byly fatální.

Takže první a nejzásadnější přidaná hodnota Dockeru je, že všichni vyvíjí na stejném prostředí.

Virtualizace vs. Kontejnerizace

Lepším přístupem se kterým se setkávám je, že projekt už u developerů běží na nějaké virtualizované mašině … Nejčasteji je její build zajištěn Vagrantem a aspoň už všichni vyvíjí za stejných podmínek a dokonce se už ani nestává, že by to na produkci bylo jinak.

Nevím přesně proč to tak je, když v zásadě by to mělo fungovat na dost podobné myšlence, že celé prostředí nahodíte jedním příkazem, ale vždy jsem musel trávit minimálně den tím, že jsem u nováčků rozchozoval a instaloval všechny potřebné nástroje (Vagrant, VirtualBox apod.), protože to potřebovalo milion pluginů a když už jsme je měli, tak to zahlásilo nekompatibilní verze a celý postup šel nanovo.

Tohle to s dockerem odpadá. Stačí nainstalovat jeden vyladěný instalátor (na OSX a Linux) a vše, dle mých zkušeností, běží jako nic.

To, že je docker znatelně výkonově nenáročnější. Je jen malé přidané plus.

Není všechno jenom růžové

Ten kdo je obeznámen fungování kontejnerů, tak ví, že o data, která si nenamountujeme jinam, příjeme při vypnutí kontejneru. Takže nahrávání obrázků a souborů do administrace na localhostu většinou problém není, ale když na produkci běží cloud balancovaných kontejnerů, tak aby měl každý z nich přístup ke stejným datům, je už docela oříšek, nicméně je řešitelný.

Největší problém, co jsem přes docker řešil, byl práce s DB. Ze stejného důvodu jaký jsem zmiňoval, tak o data přijít nechceme. … Kvůli různým zabezpečením databází mi příjde skoro neřešitelné takový kontejner zmigrovat, i když data máme uložena někde bokem. Po migraci nemají správná práva, mají špatné ownery a nejspíš nejsou pokřtěna krví jednorožce originálního kontejneru.

Proto doporučuji databáze přes docker neřešit nebo pouze na vlastní nebezpečí.

Asi další mínus o kterém jsem slyšel je, že na windows nefunguje docker nativně a je docela sranda ho rozchodit tak, aby vše fungovalo a stejně to nefunguje úplně jak má. Nevím jak aktuální je takto informace, protože když jsem začínal s dockerem já, tak stejný problém byl i na OS X a nyní už vše běží jak má. Navíc jediný obhajitelný důvod proč vyvýjet na windows je to, že pracujete v Microsoftu.

Motivace na závěr

Docker je tedy skvělý nástroj, díky kterému nejen že mají všichni stejné vývojové prostředí pouhým lusknutím prstu, ale také na menších VPS při správně nastavené architektuře je vše krásné izolované, nic se vzájemně neovlivňuje a migrace je otázka přesunu jedné složky a puštění jednoho příkazu.