Začínáme s Dockerem: kontejnerizace bez zbytečné paniky

From IT-Core
Revision as of 01:38, 22 August 2026 by CharmainOcasio (talk | contribs) (Created page with "Komunikace odhadů času patří k nejcitlivějším momentům spolupráce. Zákazník chce jasný termín, vy ale víte, že se může cokoliv změnit. Základem je rozlišovat mezi pojmy „odhad" a „závazek". Odhad je pracovní hypotéza, závazek je pevný slib. Pokud obojí smícháte, dříve nebo později narazíte. Místo slov „bude hotovo" používejte „předpokládám" nebo „odhaduji". Tím dáváte najevo, že časový údaj není věštěním z kři...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Komunikace odhadů času patří k nejcitlivějším momentům spolupráce. Zákazník chce jasný termín, vy ale víte, že se může cokoliv změnit. Základem je rozlišovat mezi pojmy „odhad" a „závazek". Odhad je pracovní hypotéza, závazek je pevný slib. Pokud obojí smícháte, dříve nebo později narazíte. Místo slov „bude hotovo" používejte „předpokládám" nebo „odhaduji". Tím dáváte najevo, že časový údaj není věštěním z křišťálové koule, ale výsledkem analýzy.

Při připojování komponent k Reduxu se vyhněte nadměrnému používání connect nebo useSelector. Vybírejte si malé části stavu, ne celý objekt. Pokud komponenta potřebuje jen jednu hodnotu, vyberte ji přímo. To platí i pro akce – dispatchujte jen ty, které komponenta skutečně používá. Pokud máte komponentu, která potřebuje mnoho hodnot, zvažte, zda není lepší rozdělit ji na menší části. Tento přístup zlepšuje čitelnost a testovatelnost.

Pokud jste dosud kontejnerizaci odkládali, protože vám přišla složitá, Docker toto vše mění. Místo instalace celého virtuálního systému stačí jediný obraz, který obsahuje aplikaci i vše, co ke svému běhu potřebuje. Výsledkem je, že stejný software funguje na vašem notebooku, na testovacím serveru i v produkci, aniž byste museli cokoli přepisovat. Tento článek vás provede prvními kroky tak, abyste se vyhnuli nejčastějším chybám a začali Docker používat opravdu prakticky.

Nakonec se zaměřte na testování. Redux se díky čistým funkcím testuje snadno: reducer otestujete bez renderování komponenty, action creatory porovnáte s očekávanými objekty. Pro integrační testy použijte renderWithRedux, který obalí komponentu storem. Nezapomínejte testovat i chybové stavy, nejen happy path. Tím odhalíte problémy dřív, než se dostanou do produkce.

Pamatujte, že pokrytí testy je jen jeden z mnoha ukazatelů kvality. Nepoužívejte ho jako jediný cíl. Doporučuji kombinovat ho s mutačním testováním, které ověřuje, zda testy skutečně odhalí vložené chyby. Pokud vám mutační testy ukazují slabé testy, i při vysokém pokrytí, je čas přestat honit čísla a zaměřit se na kvalitu testovacích případů. Stanovte si hranici, kdy je pokrytí dostatečné — pro mnoho projektů je 70–80 % rozumný cíl, ale kritické systémy vyžadují více. Hlavní je, abyste měřili pokrytí vždy s rozmyslem a nenechali se zlákat čísly bez kontextu. Když se to naučíte, pokrytí se stane užitečným pomocníkem, ne bičem.

Typickým problémem je rozdílné chování funkcí pro práci s datem a časem. V MySQL používáte NOW(), v PostgreSQL je to CURRENT_TIMESTAMP – ale pozor, v PostgreSQL vrací timestamp s časovým pásmem, což může ovlivnit porovnávání. Také funkce pro zaokrouhlování, řetězové agregace (GROUP_CONCAT v MySQL, string_agg v PostgreSQL) a práce s NULL mají odlišnou sémantiku. Doporučuji před migrací projít všechny uložené procedury, triggery a pohledy a upravit je ručně – automatické konvertory často selhávají na složitější logice.

Při práci s kontejnery se nevyhnete práci s příkazy. Základní je docker build pro vytvoření obrazu a docker run pro spuštění kontejneru. Mnozí začátečníci zapomínají, že kontejner po skončení běhu zmizí, pokud mu nezadáte přepínač -d (detached) pro běh na pozadí, nebo -it pro interaktivní režim. Tím se dostáváme k prvnímu typickému omylu: lidé očekávají, že kontejner poběží jako služba, ale ve výchozím stavu se spustí, vykoná úlohu a ukončí se. Pokud chcete, aby běžel stále, musíte buď spustit dlouhoběžící proces, nebo použít orchestrátor, jako je Docker Compose.

Nejčastější chybou začátečníků je ukládání odvozených dat do store. Například filtrovaný seznam položek: když ho uložíte, musíte ho aktualizovat při každé změně zdrojových dat. Místo toho si v komponentě spočítejte odvozená data pomocí selektoru. Selektory jsou funkce, které z celého stavu vyberou jen to, co potřebujete. Používejte je s knihovnou Reselect pro memoizaci – zabráníte zbytečným re-renderům. Tím se aplikace stane rychlejší a stav zůstane jediným zdrojem pravdy.

Častou chybou je také testovat příliš mnoho najednou. Jeden test by měl ověřovat jednu věc. Když test selže, měli byste z hlášky okamžitě poznat, co je špatně, bez nutnosti ladit. Pokud potřebujete otestovat víc scénářů, použijte parametrizaci. Ta vám umožní spustit stejný test s různými vstupními hodnotami. Například @pytest.mark.parametrize("a,b,ocekavano", [(1,2,3), (0,0,0), (-1,1,0)]) spustí test třikrát a každé selhání hlásí zvlášť.

Jak si vytvořit první kontejner a nespálit se Základním stavebním kamenem je soubor Dockerfile. Ten popisuje, jak se má výsledný obraz vytvořit. Začněte jednoduchým příkladem: vezměte oficiální obraz jazyka Python, nakopírujte do něj svůj skript a nastavte příkaz, který se má spustit. Důležité je dodržet pořadí instrukcí. Pokud totiž změníte pouze kód aplikace, Docker využije cache a build proběhne rychle. Pokud ale nejprve zkopírujete celý projekt a teprve poté instalujete závislosti, každá změna v kódu způsobí, že se závislosti instalují znovu, což je pomalé a frustrující.