Ghidul containerelor Linux: o introducere în containere

Containerele au fost un cuvânt la modă de ani de zile... dar care sunt ele mai exact?

Containerele sunt o metodă de rulare a aplicațiilor virtualizate pe computer, similară mașinilor virtuale, dar folosind un set diferit de tehnologii de bază. Ele pot fi complexe de înțeles, dar sunt esențiale pentru a rula totul Minecraft servere către Google. Și vă vom arăta cum să le configurați.

Vom folosi Linux, un sistem de operare construit cu accent pe portabilitate, modularitate și stabilitate. Linux este în orice, de la servere la cuptoare cu microunde la console de jocuri video. Containerele nu se limitează la rularea pe Linux, dar tehnologiile din spatele lor sunt cele mai potrivite și rulează cel mai bine pe Linux. Dacă sunteți nou în Linux, vă recomandăm să consultați ghid pentru începători înainte de a se scufunda.

Containerele sunt mașini virtuale?

Containerele pot fi un subiect complex, dar cel mai bine este să începeți cu un punct cheie: un container este nu o mașină virtuală. O mașină virtuală este o versiune simulată a hardware-ului specific și a software-ului său care rulează în ceea ce este cunoscut sub numele de hypervisor. Dacă ați folosit vreodată software precum VirtualBox sau

multipass, atunci ați folosit un hypervisor.

De obicei, hipervizorul rulează fie ca sistem de operare propriu (cunoscut sub numele de hipervizor de tip 1), fie în limitele unui alt sistem de operare precum Windows sau Ubuntu (un hipervizor de tip 2). Responsabilitatea hipervizorului este de a prezenta sistemului de operare invitat hardware-ul simulat de care are nevoie pentru a rula. Sistemul de operare complet poate rula apoi deasupra. Aceasta include totul, de la un CPU simulat și RAM la magistrale de date, unități de disc sau adaptoare de rețea. Această simulare este costisitoare din punct de vedere computațional, așa că mașinile virtuale au de obicei o suprasarcină semnificativă.

Deci, ce este un container?

Un container este similar cu o mașină virtuală prin faptul că conține și rulează software într-un mediu izolat pe un sistem gazdă. Cu toate acestea, containerele înlocuiesc virtualizarea hardware tradițională, bazându-se direct pe sistemul de operare gazdă. Containerele partajează bibliotecile și binarele sistemului de operare gazdă și au doar resursele și dependențele necesare pentru a rula aplicația specifică pe care o conțin. Aceasta înseamnă că nu este nevoie de un sistem de operare complet per container, deoarece toate containerele rulează pe un sistemul poate partaja un singur sistem de operare gazdă, păstrând în același timp segregarea pe care o obțineți cu virtual masini.

Containerele accesează sistemul de operare gazdă printr-un motor de containere, care gestionează containerele care rulează și controlează accesul acestora la sistemul de operare de bază. Aceasta poate include impunerea securității între containere și acordarea sau interzicerea accesului la fișierele sistemului de operare sau la conexiunile de rețea.

Care sunt unele compromisuri pentru utilizarea containerelor?

În timp ce mașinile virtuale și containerele sunt similare, utilizarea containerelor are dezavantajele sale. În primul rând, mașinile virtuale sunt considerate mai sigure, deoarece suprafața de atac pentru a „scăpa” de mașina virtuală este semnificativ mai mică și mai greu de pătruns. Un container ar putea să nu fie potrivit pentru testarea programelor malware, de exemplu.

Beneficiul major al utilizării containerelor este că sunt ușoare, evitând necesitatea de a virtualiza un întreg sistem de operare înseamnă timpi minimi de pornire și supraîncărcare redusă a sistemului. Aceasta înseamnă că mai multe containere pot rula pe o singură gazdă, ceea ce nu ar fi posibil cu mașinile virtuale.

Deoarece containerele nu necesită un sistem de operare complet, ele pot fi ușor ambalate în imagini mai mici și distribuite. În timp ce o imagine completă a unei mașini virtuale poate fi cu ușurință de zeci de gigaocteți, containerele pot apărea în imagini de până la 15 Kb. Acest lucru face extrem de ușor distribuirea și utilizarea recipientelor. Vom demonstra acest lucru prin rularea unor exemple de containere simple în Docker.

Instalarea Docker

Este multă teorie, așa că haideți să trecem la practică. Pentru a vă arăta cum să configurați un container, vom instala Docker în Ubuntu 23.10 și îl vom folosi pentru a rula un container simplu Hello World. Pașii noștri sunt testați pe o mașină virtuală, dar puteți, de asemenea, să porniți dual de pe computerul Windows sau să utilizați un laptop excelent pentru Linux.

Docker a devenit rapid instrumentul de containerizare de facto. Deși există și alte instrumente, Docker este adoptat pe scară largă și este perfect pentru toate aplicațiile, cu excepția celor mai solicitante. Există documentație despre diferitele modalități de a instala Docker, dar vom folosi scriptul de instalare convenabilă. Această comandă va descărca un script de la get.docker.com pe mașina dvs. locală:

$ curl -fsSL https://get.docker.com -o get-docker.sh

Apoi puteți rula acest script pentru a instala Docker. Puteți verifica dacă Docker este instalat corect verificând versiunea cu:

$ sudo sh ./get-docker.sh

Urmat de o verificare a versiunii cu:

$ sudo docker version

De asemenea, puteți verifica dacă serviciul docker rulează în fundal cu:

$ sudo systemctl status docker

Ar trebui să indice „activ (în rulare)” în text verde, așa cum este evidențiat în captura de ecran de mai jos. De asemenea, versiunea motorului Docker trebuie tipărită fără eroare.

Rularea unui exemplu simplu

Acum că Docker este instalat, îl puteți folosi pentru a descărca o imagine de container. Imaginile containerului seamănă mult cu ISO-urile pentru mașinile virtuale, cu excepția faptului că sunt de obicei mai mici și mai ușor de construit. Descărcați o imagine simplă a containerului hello-world cu următoarea comandă:

$ sudo docker pull hello-world

Odată ce imaginea este descărcată, puteți verifica prin enumerarea imaginilor descărcate pe sistemul dvs. folosind următoarele:

$ sudo docker images

Acum ar trebui să vedeți Hello-world descărcat. Rețineți dimensiunea foarte mică (13Kb pe mașina noastră de testare), precum și eticheta acesteia. Eticheta unei imagini este efectiv versiunea acesteia. În mod implicit, Docker va descărca cea mai recentă versiune a unei imagini. Rulați un container pe baza acestei imagini folosind:

$ sudo docker run hello-world: latest

Acest lucru va scoate spiel-ul lui Dockers, care rulează dintr-un program C foarte mic (pe care îl puteți verifica pe GitHub).

Felicitări; ai rulat primul tău container! În acest caz, programul și-a scos rezultatul și și-a încheiat execuția. Containerul este acum mort și nu mai funcționează.

Cum să păstrezi containerele în viață

După ce am rulat un container de bază, acum putem construi un exemplu mai complex care nu iese imediat după ce a finalizat o sarcină. Containerele sunt adesea construite în jurul unui singur proces, care poate genera mai multe procese. Odată ce acest proces de bază iese, întregul container va ieși odată cu el. Acest lucru ar putea suna ca o limitare, dar este de fapt foarte asemănător cu modul în care sistemele init în funcția completă a nucleului Linux.

Pentru a rula un exemplu persistent, putem extrage o imagine pentru Nginx, care este un server web folosit pentru a găzdui un procent semnificativ din site-urile web ale lumii. Am ales Nginx pentru acest exemplu deoarece este simplu, nu necesită configurație avansată și este ușor. Descărcați cea mai recentă imagine Nginx cu următoarea comandă:

$ sudo docker pull nginx

Am adăugat -p marcați aici pentru a configura redirecționarea portului de la container la sistemul de operare gazdă. Portul 80 este utilizat pentru traficul HTTP necriptat (adică web). Acest lucru vă va permite să accesați containerul de pe mașina dvs. gazdă:

$ sudo docker run -p 80:80 nginx

Această comandă va rula în terminalul dvs. în modul atașat, ceea ce înseamnă că containerul este literalmente atașat la terminalul dvs., astfel încât toate jurnalele din container vor fi tipărite acolo. Odată ce recipientul a pornit, deschideți http://localhost în browserul dvs. web. Veți vedea un ecran de bun venit Nginx similar cu cel de mai jos:

Containerul Nginx rulează acum în interiorul motorului dvs. de container. În timp ce Nginx rulează în modul atașat, va continua să ruleze atâta timp cât este deschis. Puteți ieși din containerul Nginx apăsând Ctrl + C în terminalul dvs.

Cum să rulați containerele în fundal

Pentru a rula Nginx în fundal, vom adăuga un alt steag, -d, pentru modul detașat. Acest lucru va porni containerul detașat de terminalul dvs., ceea ce înseamnă că este în fundal. De exemplu:

$ sudo docker run -d -p 80:80 nginx

Puteți enumera containerele care rulează pe un sistem. Observați cum containerul dvs. Nginx rulează acum în fundal și i s-a atribuit un ID.

$ sudo docker ps

Un container de fundal care rulează poate fi ucis folosind ID-ul său. De asemenea, puteți observa că containerului i s-a dat un nume. Când nu este specificat unul, Docker va da fiecărui container un nume unic, aleatoriu.

$ sudo docker kill 

Cu toate acestea, puteți testa acest lucru cu câteva imagini mai interesante. Sunt multe disponibile la Hub Docker, care funcționează ca un depozit central pentru imaginile containerului public.

Scufundare mai adânc cu containere

Aceasta a fost o scurtă introducere în containere. Containerele pot fi nelimitat de complexe, dar sunt un element de bază al sistemelor foarte distribuite care rulează o mare parte din internetul nostru modern. Cu toate acestea, această putere nu le înlătură utilizarea la scară mai mică. Familiarizarea cu elementele de bază ale containerelor și Docker poate fi poarta de acces pentru a rula servicii locale utile, cum ar fi Server Minecraft sau Plex pe un computer vechi.