DevOpsGroup main logo

Implementace kontejnerů Docker v kanálech DevOps

Každá firma zaměřující se na DevOps a Cloud by měla mít ve svém technologickém zásobníku nějaký nástroj pro kontejnerizaci, přičemž nejoblíbenější je Docker. Docker zmírňuje problémy s portováním vaší aplikace do různých prostředí, operačních systémů a strojů tím, že kolem aplikace vytvoří obal s předdefinovanými pokyny, jak aplikaci spustit. Jde o standard, takže je snadno integrovatelný s bezpočtem dalších služeb, jako je Kubernetes nebo Docker Swarm. Podívejme se na základy a začněme s implementací Dockeru v kanálu DevOps.  

Základy dockeru

Chcete-li efektivně začlenit Docker do svého kanálu, potřebujete:
  1. Dockerfile – recept, jak vytvořit image Dockeru
  2. Registr Docker – úložiště obrázků Docker. (Nexus, Gitlab Registry,..).
  3. Počítač se systémem Docker Daemon – kde se spouštějí obrazy Dockeru
  4. Pipeline – Doporučeno pro vytváření obrázků Docker
A Dockerfile zrychluje a optimalizuje nasazení aplikací. Jakmile je obraz Docker vytvořen, lze jej nasadit na jakýkoli počítač kompatibilní s Dockerem. Příklad základního souboru Dockerfile (návrh), na kterém běží python skript, bude vypadat takto:
				
					FROM ubuntu:22.04
COPY . /app
CMD python /app/app.py
				
			
Docker nejprve stáhne základní obraz Ubuntu, který slouží jako základní vrstva. Zkopíruje obsah vaší aplikace do souborového systému na cestu /app a nastaví spouštěcí příkaz při spuštění obrazu dockeru pro spuštění vašeho skriptu. Pokaždé, když spustíte bitovou kopii dockeru a vytvoříte kontejner dockeru, provede kód CMD (nebo ENTRYPOINT). Mějte na paměti, že pokud můžete použít stejný registr dockeru pro různé aplikace, neplatí to pro soubor Dockerfile, protože různé aplikace mají nejčastěji různé soubory Dockerfile.  

Pozor na nejčastější úskalí

Při vytváření nejlepší a nejoptimálnější bitové kopie dockeru existuje mnoho úskalí, ale my se podíváme na nejběžnější – mít nadbytečně velký obrázek dockeru.
 

Udržujte Dockerfile tak minimalistický, jak je potřeba. Často se setkáváme s masivním souborem Dockerfile, který aktualizuje základní obrázek, stahuje více knihoven v několika samostatných příkazech RUN a vytváří artefakty aplikace. Tak co je špatně?

  • Aktualizace podkladového obrázku – Vyberte si aktuální základní obrázek nebo si přizpůsobte svůj vlastní, abyste se vyhnuli aktualizaci knihoven po nasazení.
  • Řetězte příkazy RUN – Každý příkaz RUN přidá novou vrstvu ukotvitelného panelu, která dále zvětší velikost obrázku. Tím, že budete mít pouze jeden příkaz RUN, vytvoříte pouze jednu vrstvu, čímž se zmenší velikost.
  • Budování artefaktů uvnitř Dockerfile – Vždy vytvářejte artefakty mimo váš Dockerfile. Aplikace se nespouští z kódu, který napíšete, ale z vytvořené aplikace (.exe, .war atd.).

Jednoduché kroky, jako je vytvoření artefaktů mimo definici Dockerfile a jejich vytvoření uvnitř potrubí CI/CD, vám mohou ušetřit někdy až 90 procent úložiště.

 

Do potrubí

Obecný minimalistický kanál pro jakýkoli druh aplikace by měl probíhat ve třech krocích, které se také nazývají fáze v potrubí CI/CD:

  1. Sestavení aplikace 
  2. Vytvořte & posuňte obrázek 
  3. Nasadit aplikaci 
 

Tyto kroky se řídí jednoduchým pracovním postupem, jako byste spouštěli aplikaci na místním počítači. Nejprve vytvoříte aplikaci, kterou, pokud jste vývojář javascriptu, můžete znát jako dist/ složku, kde jsou artefakty uloženy. Poté vytvoříte obraz dockeru prostřednictvím výše uvedeného souboru Docker. Tím se vytvoří obal kolem aplikace a stane se agnostikou pro platformu a dalším krokem je přenesení tohoto obrazu do vzdáleného registru, aby jej mohli použít vaši kolegové nebo jako nasazení na servery.  

Na obrázku můžeme vidět jednoduchý pipeline včetně stupňů Docker. Fáze sestavení je odstraněna z fáze Docker a je umístěna jako samostatný krok. Obraz Dockeru je vytvořen pouze z artefaktů aplikací a poté odeslán do soukromého registru elastických kontejnerů. Protože nechceme, aby byla aplikace vždy nasazena automaticky, přidali jsme ruční krok, kdy uživatel může nasazení spustit. EKS (kubernetes na aws) má přístup k ECR, stáhne bitovou kopii z registru a spustí aplikaci bez nutnosti ručních kroků (kromě spuštění úlohy).

Jaké jsou tedy výhody?

Síla Dockeru a kontejnerizace v DevOps nespočívá v technologii samotné, ale v neomezených možnostech a integracích, které můžeme po implementaci do našeho pracovního postupu využít. Můžeme se podívat například na škálování aplikace na infrastruktuře bez jakékoli formy kontejnerizace a na infrastrukturu Kubernetes s ohledem na Docker jako základní motor.

 

V infrastruktuře postrádající Docker, pokud bychom chtěli škálovat aplikaci (vytvořit více replik), museli bychom aplikaci ručně zkopírovat do cílového počítače, který repliku zpracovává. Pokud bychom potřebovali aplikaci zmenšit, museli bychom znovu získat přístup k cílovému počítači a poté aplikaci odstranit. Během aktualizace bychom museli ručně aktualizovat každý kód v každém cílovém virtuálním počítači, což může být zdlouhavý proces.  




Pavol Krajkovic

Pavol Krajkovic

DevOps Specialist and Consultant

Koukni na další článek:

Co je DevOps?

“DevOps is a term which is increasingly appearing in the corporate environment of information technology. Nevertheless, there is currently a lack of a standardized or uniform definition that would precisely define the meaning of DevOps. However, there are several different perspectives that allow us to better understand this concept”

Read More »

DevOps role

A DevOps (development and operations) team is a cross-functional group of experts within an organization that focuses on improving collaboration and communication between software development and IT operations. The main goal of the DevOps team is to streamline the software development life cycle, automate processes and ensure smooth and efficient development, deployment and operation of software applications.

Read More »

Match Worn Shirt

Match Worn Shirt | DevOpsGroup“Dáváme fanouškům po celém světě šanci vlastnit kus historie a zároveň získávat finanční prostředky pro charitu.”

Viac »

IEE Sensing

“IEE Sensing je ve světě dobře známá značka se značnými zkušenostmi jako dodavatel automobilových systémů a výrobce komponentů.”

Viac »
Icons by Lordicon.com