Razumevanje Dockerja

Že nekaj mesecev uporabljam docker za strukturiranje procesa razvoja/izročanja spletnih projektov. Predlagam bralcem 'Habrabro' prevod uvodnega članka o dockerju — „Razumevanje dockra“.

Kaj je docker?

Docker je odprta platforma za razvoj, izročanje in upravljanje aplikacij. Docker je zasnovan za hitrejše uvajanje vaših aplikacij. S pomočjo dockra lahko ločite svojo aplikacijo od svoje infrastrukture in ravnate z infrastrukturo kot z upravljano aplikacijo. Docker pomaga hitreje uvajati vaš kodo, hitreje testirati, hitreje izdajati aplikacije in zmanjšati čas med pisanjem kode in njenim zagonom. Docker to dosega s pomočjo lahkotne platforme za kontejnersko virtualizacijo, ki uporablja procese in orodja za upravljanje ter uvajanje vaših aplikacij.

V svojem jedru docker omogoča zagon skoraj katerekoli aplikacije, varno izolirane v kontejnerju. Varnostna izolacija vam omogoča zagon več kontejnerjev hkrati na enem gostitelju. Lahkotna narava kontejnerja, ki se zažene brez dodatne obremenitve hipervizorja, vam omogoča, da iz svojega strojnega dela iztisnete več.

Platforma in orodja za kontejnersko virtualizacijo so lahko koristna v naslednjih primerih:

  • pakiranje vaše aplikacije (in povezanih komponent) v docker kontejnerje;
  • dodeljevanje in izročanje teh kontejnerjev vašim ekipam za razvoj in testiranje;
  • uvajanje teh kontejnerjev v vaše produkcijske okolje, tako v podatkovne centre kot v oblake.

Za kaj lahko uporabljam docker?

Hitro uvajanje vaših aplikacij

Docker je odličen za organizacijo cikla razvoja. Docker omogoča razvijalcem, da uporabljajo lokalne kontejnerje z aplikacijami in storitvami. To kasneje omogoča integracijo s procesom stalne integracije in uvajanja (continuous integration and deployment workflow).

Na primer, vaši razvijalci pišejo kodo lokalno in delijo svoj razvojni kup (nabor docker slik) s sodelavci. Ko so pripravljeni, pošljejo kodo in kontejnerje na testno okolje in izvedejo vse potrebne teste. Iz testne platforme lahko pošljejo kodo in slike na produkcijo.

Enostavnejše uvajanje in nameščanje

Plattform ki, jo docker par adharit hai, aapke workload ko aasani se port karne ki anumati deti hai. Docker containers aapke local machine par, chahe wo asli ho ya virtual machine data center me, ya cloud me bhi kaam kar sakte hain.

Docker ki portabilitiy aur lightweight prakriti aapki workload ko aasani se dynamically manage karna sambhav bana deti hai. Aap docker ka upyog apne application ya services ko deploy ya shut down karne ke liye kar sakte hain. Docker ki tezi isse lagbhag real time me karne ki anumati deti hai.

Uchch bharat aur adhik workload

Docker lightweight aur tezi se kaam karta hai. Ye hypervisor-based virtual machines ke liye ek stable, cost-effective vikalp pradan karta hai. Ye visesh roop se uchch load ke paristhitiyon me upyogi hai, jaise apna khud ka cloud ya platform-as-a-service banate samay. Lekin ye choti aur madhyam applications ke liye bhi upyogi hai jab aap apne maujooda resources ka adhik upyog karna chahte hain.

Docker ke mukhya components

Docker do mukhya components se milkar bana hai:

  • Docker: khula source virtualization platform;
  • Docker Hub: hamara platform-as-a-service docker containers ka vitran aur prabandhan karne ke liye.

Tip! Docker Apache 2.0 license ke antargat prasarit hai.

Docker ki architecture

Docker client-server architecture ka upyog karta hai. Docker client Docker daemon se samvaad karta hai, jo aapke containers ko banana, chalana, aur vitran karne ka bojh uthata hai. Dono, client aur server ek hi system par kaam kar sakte hain, aap client ko door ke docker daemon se jod sakte hain. Client aur server socket ya RESTful API ke madhyam se samvaad karte hain.

Razumevanje Dockerja

Docker daemon

Jaise ki diagram me dikhaya gaya hai, daemon host machine par suru hota hai. User server se sidhe samvaad nahi karta, balki client ke madhyam se karta hai.

Docker client

Docker client, docker program — Docker ka pramukh interface hai. Ye user se commands prapt karta hai aur docker daemon ke saath samvaad karta hai.

Docker ke andar

Docker ke gyaan ke liye, aapko teen components ke bare me jaankari honi chahiye:

  • images (obraz)
  • registries (registri)
  • containers (kontejnery)

Obraz

Docker image is a read-only template. For example, an image may contain the Ubuntu operating system with Apache and an application running on it. Images are used to create containers. Docker makes it easy to create new images, update existing ones, or you can download images created by others. Images are a component of Docker assembly.

Registry

The Docker registry stores images. There are public and private registries from which you can download or upload images. The public Docker registry is Docker Hub. It hosts a vast collection of images. As you know, images can be created by you or you can use images created by others. Registries are a component of distribution.

Kontejnerji

Containers are similar to directories. Containers contain everything needed to run an application. Each container is created from an image. Containers can be created, started, stopped, moved, or deleted. Each container is isolated and is a secure platform for an application. Containers are a component of operation.

So how does Docker work?

So far, we know that:

  • we can create images that contain our applications;
  • we can create containers from images to run applications;
  • we can distribute images through Docker Hub or another image registry.

Let's see how these components fit together.

How does an image work?

We already know that an image is a read-only template from which a container is created. Each image consists of a set of layers. Docker uses union file system to combine these layers into a single image. The union file system allows files and directories from different file systems (different branches) to be transparently overlaid, creating a coherent file system.

One of the reasons Docker is lightweight is due to the use of such layers. When you modify an image, for instance, by updating an application, a new layer is created. Thus, without replacing the entire image or rebuilding it, as you might have to do with a virtual machine, only the layer is added or updated. And you don't need to distribute the entire new image; only the update is distributed, making it easier and faster to distribute images.

Osnova každého obrazu je základní obraz. Například ubuntu, základní obraz Ubuntu nebo fedora, základní obraz distribuce Fedora. Můžete také použít obrazy jako základ pro vytváření nových obrazů. Například, pokud máte obraz apache, můžete ho použít jako základní obraz pro vaše webové aplikace.

Poznámka! Docker obvykle bere obrazy z registru Docker Hub.

Docker obrazy mohou být vytvořeny z těchto základních obrazů, kroky popsané pro vytvoření těchto obrazů nazýváme instrukcemi. Každá instrukce vytváří nový obraz nebo úroveň. Instrukcemi budou následující akce:

  • spuštění příkazu
  • přidání souboru nebo adresáře
  • vytvoření proměnné prostředí
  • pokyny, co spustit, když se spustí kontejner tohoto obrazu

Tyto instrukce jsou uloženy v souboru Dockerfile. Docker to čte Dockerfile, když sestavujete obraz, vykonává tyto instrukce a vrací konečný obraz.

Jak funguje docker registr?

Registr je úložiště docker obrazů. Po vytvoření obrazu jej můžete publikovat na veřejném registru Docker Hub nebo na vašem osobním registru.

Pomocí docker klienta můžete vyhledávat již publikované obrazy a stahovat je na váš stroj s dockerem pro vytváření kontejnerů.

Docker Hub poskytuje veřejné a soukromé úložiště obrazů. Vyhledávání a stahování obrazů z veřejných úložišť je přístupné všem. Obsah soukromých úložišť se neobjevuje ve výsledcích vyhledávání. Pouze vy a vaši uživatelé můžete získat tyto obrazy a vytvářet z nich kontejnery.

Jak funguje kontejner?

Kontejner se skládá z operačního systému, uživatelských souborů a metadat. Jak víme, každý kontejner je vytvořen z obrazu. Tento obraz říká dockeru, co je v kontejneru, jaký proces spustit při spuštění kontejneru a další konfigurační údaje. Docker obraz je dostupný pouze pro čtení. Když docker spustí kontejner, vytvoří úroveň pro čtení/zápis nad obrazem (používající union file system, jak bylo zmíněno dříve), ve které může být spuštěna aplikace.

Co se stane, když se spustí kontejner?

Buď pomocí programu docker, nebo pomocí RESTful API, docker klient říká docker démonu, aby spustil kontejner.

$ sudo docker run -i -t ubuntu /bin/bash

Pojďme si rozebrat tento příkaz. Klient se spouští pomocí příkazu docker, s volbou run, ki pravi, da bo zagnan nov kontejner. Minimalne zahteve za zagon kontejnerja so naslednji atributi:

  • katero sliko uporabiti za ustvarjanje kontejnerja. V našem primeru ubuntu
  • ukaz, ki ga želite zagnati, ko bo kontejner zagnan. V našem primeru /bin/bash

Kaj se dogaja pod pokrovom, ko zaženemo ta ukaz?

Docker zaporedno izvede naslednje:

  • naloži sliko ubuntu: docker preveri, ali obstaja slika ubuntu na lokalnem sistemu, in če je ni — jo naloži z Docker Hub. Če slika že obstaja, jo uporabi za ustvarjanje kontejnerja;
  • ustvari kontejner: ko je slika pridobljena, docker jo uporabi za ustvarjanje kontejnerja;
  • inicializira datotečni sistem in montira read-only raven: kontejner je ustvarjen v datotečnem sistemu in read-only raven je dodana sliki;
  • inicializira omrežje/mosht: ustvari omrežni vmesnik, ki omogoča dockerju, da komunicira s host računalnikom;
  • Nastavitev IP naslova: najde in nastavi naslov;
  • Zažene določen proces: zažene vašo aplikacijo;
  • Obdeluje in izda izhod vaše aplikacije: povezuje se in beleži standardni vhod, izhod ter tok napak vaše aplikacije, da lahko spremljate, kako deluje vaša aplikacija.

Zdaj imate delujoč kontejner. Lahko upravljate s svojim kontejnerjem in komunicirate s svojo aplikacijo. Ko se odločite, da ustavite aplikacijo, izbrišite kontejner.

Uporabljene tehnologije

Docker je napisan v Go in uporablja nekatere funkcionalnosti jedra Linux, da implementira zgoraj navedeno funkcionalnost.

Imenskih prostorov (namespaces)

Docker uporablja tehnologijo namespaces za organizacijo izoliranih delovnih prostorov, ki jih imenujemo kontejnerji. Ko zaženemo kontejner, docker ustvari niz imenskih prostorov za ta kontejner.

To ustvari izolirano raven, vsak vidik kontejnerja je zagnan v svojem imenskem prostoru in nima dostopa do zunanjega sistema.

Seznam nekaterih imenskih prostorov, ki jih uporablja docker:

  • pid: za izolacijo procesov;
  • net: za upravljanje omrežnih vmesnikov;
  • ipc: za upravljanje IPC virov. (ICP: Medproces komunikacija);
  • mnt: za upravljanje točk montiranja;
  • utc: za izolacijo jedra in nadzor generacije verzij (UTC: Unix timesharing system).

Kontrolne skupine (Control groups)

Docker prav tako uporablja tehnologijo cgroups ali kontrolne grupe. Ključ za rad aplikacije u izolaciji, pružajući aplikaciji samo one resurse koje želite da joj date. To garantuje da će kontejneri biti dobri susedi. Kontrolne grupe omogućavaju deljenje dostupnih resursa hardvera i, ako je potrebno, postavljanje granica i ograničenja. Na primer, ograničavanje moguće količine memorije kontejneru.

Union File System

Union File System ili UnionFS - to je datotečni sistem koji funkcioniše stvaranjem nivoa, čineći ga veoma laganim i brzim. Docker koristi UnionFS za kreiranje blokova od kojih se pravi kontejner. Docker može koristiti nekoliko varijanti UnionFS, uključujući: AUFS, btrfs, vfs i DeviceMapper.

Formati kontejnera

Docker kombinuje ove komponente u omotač, koji nazivamo formatom kontejnera. Format koji se koristi po defaultu zove se libcontainer. Takođe, Docker podržava tradicionalni format kontejnera u Linuxu pomoću LXC. U budućnosti, Docker će možda podržati druge formate kontejnera. Na primer, integracijom sa BSD Jails ili Solaris Zones.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster