Stručno upravljanje kontejnerima s Docker Composeom: Ultimativni vodič

  • Docker Compose pojednostavljuje upravljanje i orkestrirano postavljanje više kontejnera.
  • Omogućuje vam definiranje odnosa, varijabli i volumena između usluga u jednoj YAML datoteci.
  • Olakšava replikaciju okruženja i ubrzava kontinuiranu integraciju i otklanjanje pogrešaka.

Docker Sastaviti

Svijet razvoja i implementacije aplikacija doživio je pravu revoluciju posljednjih godina dolaskom kontejnera. Ovaj napredak omogućio je timovima svih veličina da zaborave na klasične "probleme okoliša" i postignu veću agilnost, skalabilnost i kontrolu nad svojom infrastrukturom. U tom kontekstu, dva alata se posebno ističu: Docker i, za koordinirano upravljanje više kontejnera, Docker Sastaviti. Danas ćemo se detaljno pozabaviti upravljanjem kontejnerima s ovaj alat, koji pokriva ne samo osnove već i detaljne savjete, primjere iz stvarnog života i najbolje prakse za potpuno savladavanje ove tehnologije.

Ako ste ikada bili frustrirani pokušavajući uskladiti verzije softverskih alata između lokalnog razvojnog i produkcijskog okruženja ili ako ste gubili sate instalirajući ovisnosti i rješavajući probleme s nekompatibilnostima, ono što slijedi je od velikog interesa za vas. Docker Compose potpuno je promijenio način na koji se implementiraju složene usluge, što vam omogućuje postavljanje cijelih arhitektura (web, API, baze podataka, predmemorije itd.) jednom naredbom i osigurava da se ponašaju isto ovdje, tamo i svugdje. Pogledajmo zajedno, detaljno, kako iskoristiti njegov puni potencijal.

Što je Docker Compose i zašto je toliko relevantan?

Prije nego što se upustimo u naredbe i konfiguracije, vrijedi razjasniti ulogu koju Docker Compose igra u ekosustavu kontejnera. Docker Compose je alat koji nam omogućuje definiranje, konfiguriranje i orkestriranje skupova kontejnera korištenjem jednostavne YAML datoteke (obično nazvane doker-compose.yml). Razlog njegovog postojanja leži u potrebi upravljanja aplikacijama sastavljenim od više od jedne usluge - na primjer, web stranice, baze podataka i sustava za predmemoriranje, svaki u zasebnom spremniku, ali koji rade zajedno.

S Composeom, Sve usluge aplikacije možete pokrenuti jednom naredbom., definiraju njihove odnose, varijable okruženja, trajne volumene, dijeljene mreže i još mnogo toga. Nadalje, nezamjenjiv je i u razvojnim okruženjima (zbog brzine kojom stvara replikabilno okruženje) i u cjevovodima kontinuirane integracije i implementacije (CI/CD), kao i u predprodukciji, pa čak i produkciji za male i srednje projekte.

Ključne prednosti Docker Composea za upravljanje kontejnerima

U nastavku navodimo neke od Glavne prednosti Što Docker Compose donosi upravljanju kontejnerima:

  • Pojednostavljeni dizajn i implementacijaOmogućuje vam definiranje infrastrukture kao koda, što replikaciju i implementaciju čini automatskima i ponovljivima.
  • Koordinacija između službiUpravlja ovisnostima, internim mrežama i redoslijedom pokretanja kontejnera, osiguravajući da usluge ispravno komuniciraju od samog početka.
  • Izolirana i konzistentna okruženjaSvi članovi tima - pa čak i različiti strojevi ili okruženja - rade pod istim tehničkim uvjetima, što minimizira mitski "meni odgovara".
  • Jednostavna skalabilnostBroj replika za bilo koju uslugu možete povećati ili smanjiti jednom instrukcijom, što olakšava testiranje opterećenja ili robusnije implementacije.
  • Jednostavna integracija u CI/CDSavršeno se uklapa u cjevovode kontinuirane integracije za izgradnju, testiranje i automatsko postavljanje okruženja.
  • Upravljajte cijelim životnim ciklusomKontroliranje pokretanja, gašenja, ponovnog pokretanja, zapisivanja, ažuriranja i brisanja svih kontejnera u stogu jednostavno je kao pokretanje Compose naredbi.

Ograničenja i izazovi pri korištenju Docker Composea

Kao i svaka tehnologija, Docker Compose također predstavlja neke izazove i razmatranja:

  • Početna krivulja učenjaTrebali biste biti upoznati s YAML sintaksom, naredbama specifičnim za Compose i konceptima mreža, volumena i ovisnosti.
  • Nepotrebna složenost u jednostavnim projektimaZa aplikacije s jednom uslugom ili vrlo jednostavne aplikacije, Docker Compose može biti pretjeran.
  • Potrebne su napredne postavkeDefiniranje prilagođenih mreža, ispravnosti usluge ili strategija ponovnog pokretanja može zahtijevati određeno stručno znanje kako bi održavanje bilo jednostavno.
  • Ograničena skala u velikim infrastrukturamaZa vrlo velike implementacije preporučuje se korištenje orkestratora poput Kubernetesa, iako je Compose i dalje savršen za mnoge situacije.

Priprema okruženja: Instaliranje Dockera i Docker Composea

Prije nego što počnete definirati usluge, Bitno je imati instaliran Docker i Docker Compose. na vašem stroju. Na trenutnim sustavima, Docker Desktop za Windows i Mac već uključuje Compose odmah nakon instalacije. U Linux okruženjima možete ga jednostavno instalirati pomoću upravitelja paketa (sljedeći primjer je za sustave temeljene na Debianu/Ubuntuu):

  • Za Dockera:
    sudo apt install docker-ce (Ubuntu/Debian) ili sudo dnf install docker-ce (Fedora/CentOS)
  • Za Docker Compose:
    sudo apt install docker-compose

U mnogim slučajevima dovoljno je dodati korisnika u docker grupu pomoću sudo usermod -aG docker $(whoami) kako bi se mogle izvršavati naredbe bez 'sudo'. Ne zaboravite ponovno pokrenuti sesiju kako bi promjene stupile na snagu.

Datoteka docker-compose.yml: struktura i primarni ključevi

Srce Docker Composea je datoteka doker-compose.yml. Njegova osnovna struktura je vrlo intuitivna, ali omogućuje ogromnu fleksibilnost:

  • verzija: Označava verziju sintakse Compose. Obično se postavlja kao prvi element.
  • usluge: Ovdje su navedene sve usluge (kontejneri) koji će činiti aplikaciju, svaka sa svojom specifičnom konfiguracijom (slika, izrada, portovi, volumeni, varijable okruženja, naredbe, ovisnosti itd.).
  • sveskaDefinira trajne volumene koji se mogu dijeliti ili povezivati ​​s određenim uslugama, osiguravajući da podaci prežive ponovna pokretanja ili brisanje kontejnera.
  • mreže: Omogućuje vam definiranje prilagođenih mreža za izolaciju i povezivanje usluga.

Minimalni primjer strukture:

verzija: "3.8" usluge: web: slika: nginx:najnoviji portovi: - "8080:80" db: slika: postgres:13 okruženje: - POSTGRES_PASSWORD=primjer svezaka: - pgdata:/var/lib/postgresql/data svezaka: pgdata:

Praktični vodič: Implementacija aplikacije s više kontejnera

Kako bismo ilustrirali korištenje Docker Composea, pregledajmo studije slučaja implementacije na temelju raspravljenih primjera:

Primjer 1: Web u Pythonu + Redis za brojanje

Pretpostavimo da želite pokrenuti jednostavnu Python Flask web stranicu koja prikazuje brojač posjeta, koristeći Redis kao pohranu u memoriji. Ne morate lokalno instalirati ni Python ni Redis - samo definirajte kako bi se trebali integrirati pomoću Composea. Možete naučiti kako izraditi prilagođene slike za svoje usluge na stvaranje prilagođenih Dockerfile slika.

  • app.pyFlask web kod.
  • zahtjevi.txtPopis ovisnosti (na primjer, flask i redis-py).
  • dockerfile: Označava kako izraditi prilagođenu sliku za web uslugu.
  • doker-compose.ymlDefinira i web servis i Redis, njihove portove, volumene i varijable.

Ovo je primjer datoteke doker-compose.yml za ovaj slučaj:

verzija: '3.8' usluge: web: izrada: . portovi: - "8000:5000" volumeni: - .:/code okruženje: - FLASK_DEBUG=1 ovisi_na: - redis redis: slika: redis:alpine

Prednosti ovog pristupa? Možete mijenjati kod na svom računalu i vidjeti promjene automatski prikazane na poslužitelju zahvaljujući montiranom volumenu, bez potrebe za ponovnom izgradnjom slike svaki put (idealno za brzi razvoj).

Primjer 2: LAMP okruženje (Apache, PHP, MySQL)

Za one koji razvijaju s klasičnim tehnologijama poput PHP-a i MySQL-a, Compose je također ključan. Tipična konfiguracijska datoteka može izgledati ovako:

verzija: "3.8" usluge: mysql: slika: mysql:5.7 okruženje: - MYSQL_DATABASE=midb - MYSQL_ROOT_PASSWORD=tajna - MYSQL_USER=korisnik - MYSQL_PASSWORD=ključ sveske: - ./data/mysql:/var/lib/mysql portovi: - "3306:3306" php: slika: php:7-apache sveske: - ./html:/var/www/html portovi: - "80:80" ovisi_na: - mysql

S ovim možete pokrenuti cijelu web stranicu u nekoliko sekundi, izmijeniti PHP datoteke i osigurati da sve radi potpuno isto kao u produkciji.

Primjer 3: Node.js aplikacija s PostgreSQL-om

Široko korišteni stog u modernom razvoju kombinira Node.js servise s PostgreSQL bazama podataka. Compose vam također omogućuje definiranje perzistencije podataka i potrebnih varijabli okruženja:

verzija: '3.8' usluge: aplikacija: slika: čvor:14-alpine naredba: sh -c "npm instalacija && npm run dev" sveske: - .:/app portovi: - 3000:3000 okruženje: - NODE_ENV=razvoj ovisi_na: - db db: slika: postgres:13 okruženje: - POSTGRES_USER=korisnik - POSTGRES_PASSWORD=ključ - POSTGRES_DB=portovi aplikacije: - 5432:5432

Nakon što je sve konfigurirano, pokrenite sastavljač i imat ćete i API i bazu podataka spremne za interakciju.

Osnovne Docker Compose naredbe

Za svakodnevno upravljanje aplikacijama s više kontejnera, Docker Compose nudi vrlo jasan i moćan skup naredbi:

  • sastavljačIzrađuje i pokreće sve usluge definirane u YAML-u. S parametrom -d pokreće ih u pozadini.
  • docker-compose downZaustavlja i uklanja sve kontejnere, mreže i volumene povezane sa stogom, poštujući trajne podatke ako su definirani.
  • docker-compose build: Izrađuje prilagođene slike navedene u datoteci.
  • dvorac-sastaviti ps: Prikazuje trenutno stanje kontejnera stoga.
  • zapisnici sastavljanja Dockera: Omogućuje vam pregled zapisnika za sve usluge ili za određenu.
  • zaustavljanje/pokretanje/ponovno pokretanje docker-compose-aUpravljajte životnim ciklusom kontejnera na granularni način.
  • docker-compose izvršni program: Pokreće naredbu unutar već pokrenutog kontejnera (na primjer, otvaranje bash-a ili pokretanje migracija baze podataka).

Napredni aspekti: mreže, volumeni, varijable i stanje usluga

Kako vaš projekt raste, Compose vam omogućuje fino podešavanje postavki:

Prilagođene mreže

Možete definirati različite mreže i izolirati osjetljive usluge (npr. baze podataka) kako biste ojačali sigurnost. Mreže su definirane na sljedeći način:

mreže: frontend: backend:

Svaka usluga može biti eksplicitno povezana s jednom ili više mreža. Nadalje, u naprednom upravljanju, kontrola nad internim mrežama može biti ključna za .

Trajni volumeni

Oni osiguravaju da čak i ako zaustavite ili izbrišete kontejnere, važni podaci (na primjer, baze podataka ili konfiguracije) neće biti izgubljeni. Možete ih definirati globalno ili za svaku uslugu pojedinačno.

Varijable okruženja i .env datoteke

Za dodatnu fleksibilnost i prenosivost, varijable se mogu deklarirati u samom YAML-u ili u datotekama .NS nalazi se u istom direktoriju. To vam omogućuje promjenu kritičnih postavki (npr. vjerodajnica) bez dodirivanja datoteke Compose.

Zdravstveni pregledi i kontrola ovisnosti

Ključno pitanje pri orkestriranju više servisa je osigurati da se ovisni servisi (npr. vaša aplikacija) ne pokušavaju pokrenuti prije nego što temeljni servisi (kao što je baza podataka) budu spremni. Compose nudi opciju ovisi o a u novijim verzijama mogu se postaviti i zdravstveni uvjeti:

usluge: web: ovisi_na: db: stanje: service_healthy db: slika: postgres:13 provjera_ispravnosti: test: interval: 10s vrijeme čekanja: 5s ponovni pokušaji: 5

Na ovaj način, vaš backend se neće pokrenuti dok baza podataka ne potvrdi da je pokrenut i radi. To je temeljna značajka u automatiziranim cjevovodima i implementacijama kako bi se izbjegle početne pogreške pri povezivanju.

Docker Compose u kontinuiranoj integraciji i implementaciji (CI/CD)

Compose je jedinstveno prilagođen kao dio modernih radnih procesa. Zahvaljujući svom formatu koda, omogućuje:

  • Testirajte potpune aplikacije na svakom zahtjevu za povlačenjem bez potrebe za ručnom konfiguracijom okruženja.
  • Implementirajte kratkotrajna okruženja za testiranje ili demonstracije, te ih se lako odlaže nakon upotrebe.
  • Automatizirajte proizvodnju u malim i srednjim projektima gdje nije izvedivo postaviti Kubernetes.

Ostali integrabilni i alternativni alati: Podman, Visual Studio, Azure i drugi

Uz Docker Compose, kontejnersko okruženje nudi i druge relevantne alate i integracije:

  • Podman i podman-dockerNa sustavima poput SLE Micro ili distribucijama orijentiranijim na sigurnost, Podman nudi alternativu Dockeru bez demona. Alat podman-docker omogućuje vam pokretanje Docker skripti bez promjena, automatski ih zamjenjujući.
  • Visual Studio i .NET.NET programeri mogu orkestrirati web servise i API-je uz predmemorije poput Redisa iz Visual Studija, automatski generirajući Compose datoteke i olakšavajući sekvencijalno otklanjanje pogrešaka i pokretanje servisa.
  • Azure AI usluge i oblakMnoge cloud platforme olakšavaju implementaciju složenih slojeva pomoću Composea, omogućujući vam kolaborativno upravljanje više AI usluga, baza podataka ili sustava za praćenje (kao što su Prometheus i Grafana).

Najbolje prakse i savjeti za maksimalno iskorištavanje Docker Composea

  • Podijeli i osvojiDobro odvojite usluge i definirajte samo one potrebne kako biste izbjegli skrivene ovisnosti i olakšali sastavljanje različitih stogova.
  • Koristite službene slike kad god je to mogućeSmanjuje probleme, jamči podršku i olakšava ažuriranja.
  • Verzija vaše docker-compose.yml datotekeDodajte ga u svoj sustav za kontrolu verzija (kao što je Git) zajedno s ostatkom projekta kako biste osigurali sljedivost promjena.
  • Ne pohranjujte kritične podatke samo u spremnikUvijek koristite vanjske volumene ili baze podataka kako biste izbjegli gubitak podataka ako trebate ukloniti ili ažurirati usluge.
  • Optimizirajte Docker datotekeAko izrađujete prilagođene slike, provjerite jesu li jednostavne i dobro dokumentirane kako biste smanjili vrijeme izrade i pogreške. Također možete naučiti kako stvoriti prilagođene slike u .
  • Pazite na portoveProvjerite jesu li portovi koje izlažete zauzeti na vašem računalu i provjerite sigurnost javnih izlaganja.
  • Držite varijable i tajne izvan repozitorijaZa osjetljive podatke koristite .env datoteke ili upravitelje tajnih podataka.

Dijagnoza i svakodnevno upravljanje aplikacijama s više kontejnera

Compose izuzetno olakšava praćenje i dijagnosticiranje stanja aplikacije. Neke preporuke za svakodnevnu primjenu:

  • Provjerite zapisnike s docker-compose logs -f pratiti ponašanje svake usluge u stvarnom vremenu.
  • Zaustavljanje i ponovno pokretanje određenih usluga ako trebate pokrenuti testove ili privremeno osloboditi resurse.
  • Pauziraj i nastavi cijeli stog ako trebate obavljati zadatke održavanja.

Implementacija složenih aplikacija: primjeri iz stvarnog života i preporuke

Mnoge aplikacije iz stvarnog svijeta napredno koriste Compose za koordinaciju više usluga. Uobičajeni slučajevi uključuju:

  • Moderni web stogoviNa primjer, React aplikacija na frontendu, API u Node/Expressu i MongoDB baza podataka.
  • MikroservisiRazličite specijalizirane usluge međusobno komuniciraju putem internih mreža, s pohranom u odvojenim bazama podataka.
  • Poslovne aplikacijePovezivanje servisa poput RabbitMQ-a (slanje poruka), Redisa (predmemoriranje), Elasticsearcha (tražilica) itd., sve u istoj Compose datoteci.

Prilagođavanje Composea specifičnim potrebama projekta je ključno, uzimajući u obzir izolaciju između usluga, postojanost podataka i replikabilnost okruženja.

Dodatne preporuke za produkcijska okruženja

Iako je Compose idealan za razvoj i predprodukciju, njegova upotreba u produkciji ima svoje nijanse:

  • Koristite specifične varijable okruženja odvojiti razvojnu i produkcijsku konfiguraciju.
  • Provjerite sigurnost kontejnera i mreža: otkrijte samo potrebne portove, koristite optimizirane slike i ažurirajte softver.
  • Budite oprezni s volumenimaU produkciji razmislite o korištenju vanjske trajne pohrane i redovitom sigurnosnom kopiranju kritičnih podataka.
  • Praćenje statusa i performansi usluga s alatima poput Prometheusa i Grafane.

Za veće projekte ili one s visokim zahtjevima za dostupnošću i skalabilnošću, nadogradnja na orkestratore poput Kubernetesa može biti ključna, iako je Docker Compose i dalje savršen za startupove, MVP-ove, male timove i brzo testiranje.

Upravljanje aplikacijama s više kontejnera nikada nije bilo pristupačnije i moćnije nego s Docker Composeom. S jednom konfiguracijskom datotekom možete definirati i kontrolirati cijele infrastrukture, osiguravajući da se vaša aplikacija implementira, skalira i radi jednako u bilo kojem okruženju. Ključno je iskoristiti njegovu fleksibilnost, održavati dobre prakse i, prije svega, u potpunosti razumjeti mogućnosti i ograničenja koja nudi. Ako ste savladali Compose, imate ključni alat za moderni razvoj i upravljanje softverom.

Dockerfile-4 prilagođene slike
Povezani članak:
Kako stvoriti prilagođene Dockerfile slike korak po korak

Dodaj kao preferirani izvor