Na posledním setkání Java User Group v Praze někdo zmínil Docker. Prý to je budoucnost deploymentu, prý to změní všechno. Přiznám se, že jsem byl skeptický — za patnáct let v IT jsem slyšel „tohle změní všechno” mockrát. Ale po víkendu experimentování musím říct: Docker je zajímavý. Hodně zajímavý.
Co je Docker (a co není)¶
Docker je v podstatě lehká virtualizace na úrovni operačního systému. Místo celého virtuálního stroje (s vlastním kernelem, init systémem a vším) Docker vytvoří izolovaný proces, který sdílí kernel s hostitelským systémem. Výsledek: kontejner startuje za sekundy místo minut, zabírá megabajty místo gigabajtů a běží s minimálním overhead.
Není to novinka v pravém slova smyslu — Linux kontejnery (LXC) existují léta. Co Docker přidal, je jednoduchost použití. Dockerfile, image registry (Docker Hub), layered filesystem — to vše dělá z kontejnerů něco, co zvládne každý vývojář, nejen Linux guru.
Náš první Dockerfile — Java EE na Tomcat¶
Začali jsme jednoduše. Máme interní aplikaci na Apache Tomcat 7 — jednoduchý WAR file, REST API pro mobilní klienty. Dockerfile vypadá překvapivě jednoduše:
FROM tomcat:7-jre7
COPY myapp.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]
Čtyři řádky. Build image trvá pár sekund. Spuštění kontejneru sekundu. A aplikace běží identicky na mém MacBooku, na kolegově Linuxu i na testovacím serveru. „Works on my machine” je mrtvé.
Proč nás Docker nadchl¶
Reprodukovatelnost. Image je immutable. Co zbuildíte, to dostanete. Žádné „na serveru chybí knihovna” nebo „je tam jiná verze Javy”.
Izolace. Každý kontejner má svůj filesystem, síťování, procesy. Dva kontejnery na stejném serveru si navzájem nešahají do zelí.
Rychlost. Nový vývojář v týmu? Pull image, docker run, za minutu má běžící vývojové prostředí. Místo dvou dnů nastavování laptopů.
Proč nás Docker vyděsil¶
Produkční nasazení? Docker je verze 0.9. Ano, nula-devět. Na produkci bankovního systému to zatím nedáme. Stabilita, bezpečnost, monitoring — to vše je zatím ve stádiu „early adopter”.
Persistence. Kontejner je ephemeral — když ho zastavíte, data zmizí. Volume mounts řeší persistenci, ale správa volumes je zatím rudimentální. Pro databáze v kontejnerech to vidím jako problém.
Networking. Propojit kontejnery je jednoduché přes –link. Ale co load balancing, service discovery, SSL termination? Na to Docker (zatím) nemá odpověď. Proslýchá se něco o orchestraci a clusteringu, ale to je hudba budoucnosti.
Windows. Docker běží na Linuxu. Polovina našeho týmu má Windows. Boot2Docker (VM s Linuxem) je workaround, ne řešení. Doufáme, že Microsoft časem Docker podpoří nativně.
Kde Docker používáme teď¶
Zatím výhradně ve vývoji a testování:
- Lokální vývojové prostředí — celý stack v docker-compose
- CI build agenti — čistý build environment v kontejneru
- Demo prostředí pro klienty — rychlý setup na libovolném serveru
- Experimentování s novými technologiemi (Elasticsearch, MongoDB)
Na produkci? Zatím ne. Ale sledujeme vývoj pozorně. Mám pocit, že za rok nebo dva bude situace jiná.
Docker stojí za pozornost¶
Neříkám, že máte zítra přepsat všechno do kontejnerů. Ale Docker je technologie, kterou byste měli znát. Nainstalujte si ho, zkuste kontejnerizovat jednu svou aplikaci, pohrajte si s docker-compose. Vsadím se, že vás to nadchne.