Ce este Docker?

Un container Docker este un format standard în care sunt împachetate toate codurile și dependențele unei aplicații, pentru rularea rapidă și fiabilă a acesteia în mai multe medii de calcul. Un container Docker este un container popular cu dimensiuni mici, de sine stătător, executabil, care include tot ce este necesar pentru a rula o aplicație, inclusiv biblioteci, instrumente de sistem, coduri și timp de rulare. Docker este, de asemenea, o platformă software care le permite dezvoltatorilor să construiască, să testeze și să implementeze rapid aplicații containerizate.

Containers as a Service (CaaS) sau Container Services sunt servicii gestionate în cloud care controlează ciclul de viață al containerelor. Serviciile de containere ajută la orchestrarea (pornirea, oprirea, scalarea) duratei de rulare a containerelor. Folosind serviciile de containere, puteți simplifica, automatiza și accelera ciclul de viață al dezvoltării și implementării aplicațiilor.

Serviciile Docker și Container au fost adoptate rapid și au avut un succes extraordinar în ultimii ani. Dintr-o tehnologie open source aproape necunoscută și destul de tehnică în 2013, Docker a evoluat într-un mediu de rulare standardizat, acceptat acum oficial pentru multe produse Oracle de tip enterprise.

Terminologia Docker

Docker:

O platformă de containere software destinată dezvoltării, expedierii și rulării aplicațiilor care utilizează tehnologia containerelor. Docker are două versiuni: ediția Enterprise și ediția Community

Container:

Spre deosebire de VM, care oferă virtualizarea hardware-ului, un container oferă o virtualizare simplă, la nivel de sistem de operare, sintetizând „spațiul utilizatorului”. Containerele partajează kernelul sistemului gazdă cu alte containere. Un container, care rulează pe sistemul de operare gazdă, este un software standard care împachetează codul și toate dependențele sale astfel încât aplicațiile să poată rula rapid și fiabil dintr-un mediu în altul. Containerele sunt non-persistente și sunt încărcate din imagini.

Docker Engine:

software-ul open source gazdă care creează și rulează containerele. Docker Engine acționează ca aplicație client-server care acceptă containere pe diferite servere Windows și sisteme de operare Linux, inclusiv Oracle Linux, CentOS, Debian, Fedora, RHEL, SUSE și Ubuntu.

Imagini Docker:

o colecție de software pentru rulare sub formă de container, care conține un set de instrucțiuni pentru crearea unui container ce poate rula pe platforma Docker. Imaginile nu pot fi modificate, iar modificările unei imagini necesită crearea unei imagini noi.

Docker Registry:

locul de stocare și descărcare a imaginilor. Registry este o aplicație pe server fără stare și scalabilă, care stochează și distribuie imaginile Docker.

Cine folosește Docker?

Docker este un cadru deschis de dezvoltare a aplicațiilor, conceput ca instrument de ajutor pentru DevOps și dezvoltatori. Folosind Docker, dezvoltatorii pot construi, împacheta, expedia și rula cu ușurință aplicații sub formă de containere simple, portabile și autosuficiente, care pot rula, practic, oriunde. Containerele le permit dezvoltatorilor să împacheteze o aplicație cu toate dependențele sale și să o implementeze ca pe o singură unitate. Oferind containere de aplicații construite în prealabil și autosustenabile, dezvoltatorii se pot concentra asupra codului aplicației și utilizării, fără a se preocupa de sistemul de operare de bază sau de sistemul de implementare.

În plus, dezvoltatorii pot valorifica mii de aplicații de containere open source care sunt deja proiectate să ruleze într-un container Docker. Pentru echipele DevOps, Docker se pretează la integrarea continuă și la lanțuri de instrumente de dezvoltare și reduce constrângerile și complexitatea necesare, în cadrul arhitecturii lor de sistem, pentru a implementa și gestiona aplicațiile. Odată cu introducerea serviciilor cloud de orchestrare a containerelor, orice dezvoltator poate dezvolta aplicații containerizate local în mediul lor de dezvoltare și apoi să mute și să ruleze acele aplicații containerizate în producție, pe servicii cloud, cum ar fi serviciile Kubernetes gestionate.

DevOps și dezvoltatorii

Containerele pot fi împachetate de orice tip de dezvoltator. Cei din industria software-ului separă adesea dezvoltatorii după specializare - front end, back end sau orice nivel între cele două. Deși, în general, dezvoltatorii back-end împachetează containerele, oricine este familiarizat cu conceptele CaaS de bază poate reuși în această zonă specială a procesului de dezvoltare a software-ului. Înainte de a începe să împachetați dependențele aplicației, accesați developer.oracle.com și familiarizați-vă cu instrumentele pe care le puteți utiliza pentru a vă crea aplicația sau programul.

Docker în comparație cu Kubernetes

Containerele Linux există din 2008, dar nu erau suficient de cunoscute până la apariția containerelor Docker, în 2013. Odată cu apariția containerelor Docker, s-a manifestat un interes cu adevărat exploziv față de dezvoltarea și implementarea aplicațiilor containerizate. Pe măsură ce numărul aplicațiilor containerizate a crescut până la sute de containere implementate pe mai multe servere, modul de funcționare a acestora a devenit mai complex. Cum coordonați, scalați, gestionați și programați sute de containere? Aici, Kubernetes se dovedește a fi de ajutor. Kubernetes este un sistem de orchestrație open source care vă permite să rulați containerele și sarcinile de lucru Docker. Vă ajută să gestionați complexitatea operațională atunci când treceți la scalarea containerelor multiple, implementate pe mai multe servere. Motorul Kubernetes orchestrează automat ciclul de viață al containerelor, distribuind containerele aplicației pe toată infrastructura de găzduire. Kubernetes poate scala rapid resursele în sus sau în jos, în funcție de solicitare. Întreține, programează, șterge și monitorizează continuu starea containerelor.

Noțiuni de bază Docker

Conceptele de bază Docker sunt imaginile și containerele. O imagine Docker conține tot ce este necesar pentru a rula software: codul, un timp de execuție (de exemplu, Java Virtual Machine (JVM)), drivere, instrumente, scripturi, biblioteci, implementări și multe altele.

Un container Docker este o instanță a unei imagini Docker care rulează. Cu toate acestea, spre deosebire de virtualizarea tradițională cu un hipervizor de tip 1 sau de tip 2, un container Docker rulează pe nucleul sistemului de operare gazdă. În cadrul unei imagini Docker nu există un sistem de operare separat, așa cum se arată în Figura 1.

imagine noțiuni de bază docker
Figura 1

Izolare vs. virtualizare

Fiecare container Docker are propriul sistem de fișiere, propriul pachet de rețea (și, prin urmare, propria adresă IP), propriul spațiu de procesare și limitări de resurse definite pentru procesor și memorie. Deoarece un container Docker nu trebuie să pornească un sistem de operare, acesta pornește instantaneu. Docker se referă la izolare, adică la separarea resurselor unui sistem de operare gazdă, spre deosebire de virtualizare, adică furnizarea unui sistem de operare de tip oaspete deasupra sistemului de operare gazdă.

Sistem de fișiere incrementale

imagine sistem de fișiere incrementale
Figura 2

Sistemul de fișiere al unei imagini Docker este stratificat, cu semantică copy-on-write. Aceasta permite moștenirea și reutilizarea, economisește resurse pe disc și permite descărcarea incrementală a imaginii.

Așa cum se arată în Figura 2, o imagine Docker cu o implementare WebLogic s-ar putea baza pe o imagine cu un domeniu Oracle WebLogic Server, care s-ar putea baza pe o imagine WebLogic, care se bazează pe o imagine Java Development Kit (JDK), care, la rândul său, se bazează pe o imagine de bază Oracle Linux.

Docker Registry

Dacă imaginile Docker sunt ușor de construit, iar dezvoltatorii adoră simplitatea și portabilitatea imaginilor Docker, aceștia au descoperit rapid că gestionarea a mii de imagini Docker este foarte provocatoare. Docker Registry abordează această provocare. Docker Registry este un mod standard de stocare și distribuire a imaginilor Docker. Docker Registry este un depozit open source bazat pe licența permisivă Apache.

Docker Registry contribuie, de asemenea, la îmbunătățirea controlului accesului și a securității imaginilor Docker stocate în depozitul său. Gestionează distribuția de imagini și, de asemenea, se poate integra cu fluxurile de lucru pentru dezvoltarea aplicațiilor. Dezvoltatorii își pot configura propriul Docker Registry sau pot utiliza un serviciu găzduit Docker Registry, cum ar fi Docker Hub, Oracle Container Registry, Azure Container Registry etc.

Docker Hub este un Docker Registry găzduit, administrat de Docker. Docker Hub conține peste 100.000 de imagini de containere provenite de la furnizori de software, proiecte open source și comunitate. Docker Hub conține software și aplicații din depozite oficiale precum NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu și Oracle Linux.

Când începe un container, Docker va extrage automat imaginea corespunzătoare din Docker Hub public, dacă aceasta nu este disponibilă local. În plus, vă puteți crea propriile imagini și le puteți trimite către Docker Hub, într-un depozit public sau privat.

Figura 3: captură de ecran Docker Registry
Figura 3

Docker ca timp de rulare pentru microservicii

Ideea de a segmenta aplicațiile monolitice în componente mai mici de microservicii se bucură de multă atenție în zilele noastre, în rândul dezvoltatorilor de software.

Microserviciile se desfășoară independent ca proces, utilizează protocoale ușoare pentru a comunica între ele și fiecare serviciu deține propriile date. Deoarece microserviciile urmează o abordare de guvernanță descentralizată, acestea necesită o cantitate destul de mare de automatizare a infrastructurii, testare automată, canale CD complet automatizate și echipe DevOps calificate și flexibile.

Există încă multe discuții despre acest stil arhitectural, totuși ar fi naiv să presupunem că o aplicație descompusă în microservicii poate fi operată, pur și simplu, ca un set de procese. Pentru a numi doar câteva cerințe, un microserviciu trebuie să fie independent față de gazdă și izolat la nivel de sistem de operare. Acesta trebuie să ruleze în limitele resurselor sale, trebuie să fie redimensionat în sus și în jos, repornit dacă dă eroare și descoperit și conectat la alte microservicii printr-un nivel de rețea definit de software.

Prin urmare, rularea unui microserviciu într-un container Docker vă plasează într-o poziție excelentă pentru a atinge majoritatea acestor obiective.

Docker – Două dimensiuni cheie

Docker schimbă modul în care construim, livrăm și rulăm software-ul în două sensuri diferite:

  • Îmbunătățește procesul, pentru a obține aplicații în mod fiabil de la dezvoltare la producție.
  • Oferă un format de imagine standard, pentru a ajunge de la on-premises la cloud.

Ambele dimensiuni sunt explicate mai detaliat în paragrafele următoare.

Imagine Docker – De la dezvoltare la producție

Crearea unei imagini Docker cu toate dependențele sale rezolvă problema lui „dar a funcționat pentru mine pe mașina mea de dezvoltare”. Ideea de bază este că o imagine Docker este creată automat de un canal de construcție dintr-un depozit de cod sursă precum Git și testată inițial într-un mediu de dezvoltare. Această imagine imuabilă va fi apoi stocată într-un registru Docker.

Așa cum se arată în Figura 4, aceeași imagine va fi utilizată pentru teste de încărcare ulterioare, teste de integrare, teste de acceptare și multe altele. În fiecare mediu va fi utilizată aceeași imagine. Diferențe de mediu specifice mici, dar necesare, cum ar fi un URL JDBC pentru o bază de date de producție, pot fi introduse în container ca variabile de mediu sau fișiere.

captură de ecran imagine docker
Figura 4

Statisticile arată că 65% dintre toate cazurile de utilizare actuale Docker sunt în curs de dezvoltare și 48% folosesc Docker pentru integrare continuă

Docker Cloud

Docker a schimbat adoptarea mediilor cloud publice: pe de o parte, cu o imagine Docker, pentru prima dată în istorie, există un format comun de pachete care poate fi rulat atât on-premises, cât și la fiecare furnizor major de cloud. Containerele Docker rulează pe un laptop în același mod în care rulează în Oracle Cloud.

Pe de altă parte, deoarece containerele Docker rulează pe fiecare mediu cloud public major, ele reprezintă o contribuție majoră la depășirea unei prejudecăți îndelung manifestate împotriva mediilor cloud publice: blocarea furnizorului. Fiecare furnizor important de cloud oferă acum Docker ca PaaS.

Versiuni Docker – Maturitatea tehnologiei de bază

Ritmul lansărilor Docker este mult mai rapid decât ciclul de lansare al software-ului consacrat, de tip enterprise. Uneori, ritmul pur și simplu al lansărilor Docker, împreună cu noutatea proiectului Docker, pune probleme cu privire la securitatea și stabilitatea Docker.

Deși Docker și linia sa de comandă, procesul daemon Docker, API-ul său și instrumente precum Docker Swarm, Docker Machine și Docker Compose au evoluat doar în ultimii trei ani, caracteristicile kernelului de bază au fost disponibile pentru fiecare kernel Linux de aproape un deceniu.

Un exemplu optim pentru cei care au adoptat timpuriu tehnologia containerelor este Google. Google a folosit containere Linux chiar înainte să existe Docker. Mai mult, Google rulează totul într-un container. Se estimează că Google lansează câteva miliarde de containere pe săptămână.

Istoricul grupurilor de control și al spațiilor de nume

Caracteristicile kernelului Linux de bază pe care le folosește Docker sunt grupurile de control și spațiile de nume. În 2008, grupurile de control au fost introduse în nucleul Linux pe baza lucrărilor efectuate anterior de dezvoltatorii Google1. Grupurile de control limitează și iau în calcul utilizarea resurselor unui set de procese ale sistemului de operare.

Kernelul Linux folosește spațiul de nume pentru a izola între ele resursele de sistem ale proceselor. Primul spațiu de nume, adică spațiul de nume de instalare, a fost introdus încă din 2002.2

Container Cloud Services

Prima parte a acestui articol a explicat câteva concepte Docker importante. Cu toate acestea, într-un mediu de producție nu este suficient să rulați, pur și simplu, o aplicație într-un container Docker.

Pentru a configura și opera un mediu de producție este necesar hardware de rulare a containerelor. Un software precum Docker, împreună cu depozitele și managerii de cluster, trebuie să fie instalat, actualizat și corectat. Dacă mai multe containere Docker comunică la nivelul gazdelor, trebuie creată o rețea. Containerele grupate trebuie repornite dacă dau eroare. În plus, un set de containere legate între ele ar trebui să fie la fel de ușor de implementat ca o singură instanță logică de aplicație. Un exemplu în acest sens ar putea fi un instrument de echilibrare a sarcinii, câteva servere web, unele instanțe Oracle WebLogic Server cu un server de administrare, un server gestionat și o bază de date. Pentru a gestiona aplicațiile containerizate la scară este nevoie de un sistem de orchestrare a containerelor, cum ar fi Kubernetes sau Docker Swarm. Implementarea, gestionarea și operarea sistemelor de orchestrație, precum Kubernetes, pot fi dificile și consumatoare de timp.

Pentru a facilita și eficientiza pentru dezvoltatori crearea de aplicații containerizate, furnizorii de cloud oferă Container Cloud Services sau Containers as a Service (CaaS). Container Cloud Services ajută dezvoltatorii și echipele de operațiuni să eficientizeze și să gestioneze ciclul de viață al containerelor în mod automat. Aceste servicii de orchestrație, construite în mod obișnuit folosind Kubernetes, le facilitează echipelor DevOps managementul și funcționarea aplicațiilor containerizate la scară largă. Oracle Container Engine for Kubernetes și Azure Kubernetes Service sunt două exemple de servicii cloud populare gestionate prin orchestrarea containerelor.

Oracle Container Engine for Kubernetes este un serviciu gestionat integral, scalabil și extrem de disponibil, pe care îl puteți utiliza pentru a implementa aplicațiile dvs. containerizate în cloud. Utilizați Container Engine for Kubernetes (abreviat uneori doar ca OKE) atunci când echipa dvs. de dezvoltare dorește să construiască, să implementeze și să gestioneze în mod fiabil aplicații native pentru cloud.

Imagini Docker de la Oracle

Containerele pot fi împachetate de orice tip de dezvoltator. Cei din industria software-ului separă adesea dezvoltatorii după specializare - front end, back end sau orice nivel între cele două. Deși, în general, dezvoltatorii back-end împachetează containerele, oricine este familiarizat cu conceptele CaaS de bază poate reuși în această zonă specială a procesului de dezvoltare a software-ului. Înainte de a începe să împachetați dependențele aplicației, accesați developer.oracle.com și familiarizați-vă cu instrumentele pe care le puteți utiliza pentru a vă crea aplicația sau programul.

Prezentăm mai jos câteva surse pentru obținerea sau construirea imaginilor Docker pentru produsele Oracle. Depozitul Oracle GitHub pentru imagini Docker conține fișiere și mostre Docker necesare pentru a crea imagini Docker pentru produsele comerciale Oracle și pentru proiecte open source sponsorizate de Oracle.

Laborator practic Docker – Dezvoltare containerizată cu Docker

Referințe

  1. Grupuri de control (Wikipedia)
  2. Spații de nume Linux (Wikipedia)