Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

Docker — první kroky s kontejnery pro Java vývojáře

15. 03. 2014 3 min čtení CORE SYSTEMSdevelopment

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.

dockerkontejneryjavalinux