Ako ste početnik u Docker Composeu, ali imate neko znanje o Dockeru, ovaj je članak za vas. Naučit ćete o:
- Što je Docker Compose?
- Popularne usporedbe
- Docker Compose vs Kubernetes
- Docker Compose vs Docker Swarm
- Instaliranje Dockera Compose
- Docker-Compose.yml datoteka
- Docker-Compose naredbe
Prije nego što zaronite u sočne dijelove ovog članka, malo pozadine o tehnologiji trebalo bi biti sjajno.
Kontejnerizacija je postala ključni dio softverske infrastrukture, a to se odnosi na velike, srednje ili male projekte. Iako spremnici nisu novi, Docker ih je učinio popularnima. S kontejnerima problemi ovisnosti postaju prošlost. Spremnici također igraju veliku ulogu u tome da arhitektura mikro usluga bude vrlo učinkovita. Softverske aplikacije izrađene su od manjih usluga, pa je lako te usluge smjestiti u kontejnere i one komuniciraju.
Problem s tim je što će biti pokrenuto toliko kontejnera. Takav da upravljanje njima postaje složeno. To stvara potrebu za alatom koji pomaže u pokretanju više spremnika, što Docker Compose čini. Na kraju članka razumjet ćete osnovne koncepte Docker Composea i moći ćete ga i koristiti.
Što je Docker Compose?
Bez sve složenosti, Docker Compose alat je koji vam omogućuje upravljanje više Dockerovih spremnika. Sjetite se mikro-usluga? Koncept podjele web aplikacije na različite usluge? Pa, te će se usluge odvijati u pojedinačnim spremnicima kojima treba upravljati.
Zamislite da web aplikacija ima neke od ovih usluga:
- Prijavite se
- Prijaviti se
- Resetiranje lozinke
- Povijest
- Grafikon
Slijedom arhitekture slične mikroservisu, te će se usluge podijeliti i pokretati u zasebnim spremnicima. Docker Compose olakšava upravljanje svim ovim spremnicima, umjesto da se njima upravlja pojedinačno. Važno je napomenuti da Docker Compose ne izrađuje eksplicitno Dockerove slike. Posao izrade slika obavlja Docker kroz Dockerfile.
Popularne usporedbe
Uobičajeno je imati mnogo rješenja problema. Docker Compose rješava ovaj problem upravljanja više spremnika. Kao rezultat, često postoje usporedbe s drugim rješenjima. Trebate napomenuti da je većina ovih usporedbi pogrešnih. Iako često nisu valjani, najbolje je da o njima saznate jer vam pomažu da bolje razumijete Docker Compose.
Dvije usporedbe o kojima će se raspravljati su:
- Docker Compose vs Kubernetes
- Docker Compose vs Docker Swarm
Docker Compose vs Kubernetes
Kubernetes se često uspoređuje s Docker Composeom. Ali sličnosti u oba alata su malene, s velikim nepodudarnostima. Te tehnologije nisu na istoj razini niti u opsegu. Stoga je usporedba oba alata posve pogrešna.
Kubernetes u narodu poznat kao k8s je alat otvorenog koda koji se može koristiti za automatizaciju spremnika (nije ograničen na Docker). S k8s možete rasporediti i upravljati spremnicima, osiguravajući da se skaliraju pri različitim opterećenjima. Kubernetes osigurava da su spremnici otporni na kvarove i rade optimalno uzrokujući njihovo samoizlječenje, što nećete dobiti od Docker Compose.
Kubernetes je moćniji alat. Prikladnije je za davanje spremnika za velike primjene u proizvodnji.
Docker Compose vs Docker Swarm
Docker Compose također se često uspoređuje s Docker Swarmom, a pogrešan je koliko i usporedba Kubernetesa. Umjesto toga, Docker Swarm trebao bi se uspoređivati s Kubernetesom.
Docker Swarm je alat otvorenog koda koji vam omogućuje izvođenje orkestracije spremnika baš kao što biste to učinili Kubernetes. Oboje imaju svoje prednosti i nedostatke, ali to nije tema rasprave. Dobro ćete se snaći znajući da su obje slične i nijedna nije alternativa Docker Composeu.
Instaliranje Dockera Compose
Docker Compose službeni je Docker alat, ali ne dolazi s Docker instalacijom. Dakle, morate ga instalirati kao zaseban paket. Postupak instalacije Docker Compose za Windows i Mac dostupan je na službenim stranicama.
Da biste instalirali Docker Compose na Ubuntu, možete upotrijebiti sljedeću naredbu:
sudo apt-get instaliraj docker-composeDa biste instalirali Docker Compose na druge Linux distribucije, možete upotrijebiti curl. Jednostavno pokrenite sljedeće naredbe:
sudo uvojak -Lhttps: // github.com / docker / compose / releases / download / 1.18.0 / docker-compose-'uname
-s '-' uname -m '-o / usr / local / bin / docker-compose
Zatim:
sudo chmod + x / usr / local / bin / docker-composePrva naredba preuzima najnoviju verziju programa Docker Compose u direktorij namijenjen paketima. Drugi postavlja dozvole za datoteku, čineći je izvršnom.
Docker-Compose.yml datoteka
Neće biti strašno pogrešno reći da je datoteka Docker Compose Docker Compose, što je Dockerfile Dockeru. Unutar datoteke Docker Compose nalaze se sve upute koje Docker Compose slijedi prilikom upravljanja spremnicima. Ovdje definirate usluge koje na kraju postanu spremnici. Također definirate mreže i količine o kojima usluge ovise.
Datoteka Docker Compose koristi YAML sintaksu, a vi morate spremiti kao docker-compose.yml. U web aplikaciji možete imati usluge za pozadinu, sučelje, redove baza podataka i poruka. Te će usluge trebati određene ovisnosti. Ovisnosti poput mreža, priključaka i pohrane za optimalan rad. Sve potrebno za cijelu aplikaciju bit će definirano u datoteci Docker Compose.
Za pisanje datoteke za sastavljanje potrebno je osnovno razumijevanje YAML sintakse. Ako to niste upoznati, trebalo bi vam manje od sat vremena da to shvatite. U vašoj će datoteci biti puno uparivanja ključa / vrijednosti. Najviši nivo su:
- Verzija
- Usluge
- Mreža
- Svezaka
Međutim, raspravljat će se samo o verziji i uslugama, kao što možete definirati ostale dvije u direktivi o uslugama.
Verzija
Tijekom pisanja datoteke prvo ćete definirati verziju. Kao i u vrijeme pisanja ovog članka, Docker Compose ima samo verzije 1, 2 i 3. Nije iznenađujuće što je preporučena verzija za upotrebu jer ima određene razlike u odnosu na starije verzije.
U datoteci možete odrediti verziju koja će se koristiti za Docker Compose:
- Verzija: “3”
- Verzija: „2.4 "
- Verzija: „1.0 "
Usluge
Ključ usluge vjerojatno je najvažniji ključ u datoteci Docker Compose. Ovdje navodite spremnike koje želite stvoriti. U ovom odjeljku datoteke postoji puno opcija i mnoštvo kombinacija za konfiguriranje spremnika. Evo nekoliko opcija koje možete definirati pod tipkom usluge:
- Slika
- Ime spremnika
- Ponovo pokrenite
- Ovisi o
- Okoliš
- Luke
- Svezaka
- Mreže
- Ulazna točka
U ostatku ovog odjeljka naučit ćete kako svaka od ovih opcija utječe na spremnike.
Slika
Ova opcija definira koju sliku kao usluga koristi. Koristi istu konvenciju kao i kada povlačite sliku iz Dockerhub-a u Dockerfile. Evo primjera:
slika: postgres: najnovijeMeđutim, nema ograničenja samo za korištenje Dockerhub datoteka. Također možete graditi slike sa svog računala putem datoteke Docker Compose koristeći Dockerfile. Za to možete koristiti direktive "build", "context" i "dockerfile".
Evo primjera:
izgraditi:kontekst: .
dockerfile: dockerfile
“Kontekst” bi trebao sadržavati put do direktorija s Dockerfileom. Tada "dockerfile" sadrži naziv Dockerfile koji će se koristiti. Uobičajeno je uvijek imenovati svoje Dockerfilove kao "Dockerfile", ali to daje priliku da koristite nešto drugačije. Trebate napomenuti da ovo nije jedini način korištenja slike kroz Dockerfile.
Ime spremnika
Docker spremnicima dodjeljuje nasumična imena. No, možda biste željeli imati prilagođena imena za spremnike. Pomoću tipke "container_name" možete kontejnerima dati određena imena, umjesto nasumično generiranih imena Dockera.
Evo primjera:
ime_kontejnera: linuxhint-appMeđutim, morate biti oprezni u vezi s jednom: nemojte davati isto ime višestrukim uslugama. Imena spremnika moraju biti jedinstvena; ako to učinite, usluge će propasti.
Ponovo pokrenite
Softverska infrastruktura je osuđena na propast. Znajući ovo, lakše je planirati oporavak od ovog neuspjeha. Mnogo je razloga zbog kojih spremnik ne uspije, pa tipka za ponovno pokretanje govori spremnik da se probudi ili ne. Imate sljedeće mogućnosti, ne, uvijek, u slučaju kvara i ako se ne zaustavi. Ove opcije podrazumijevaju da se spremnik nikada neće ponovo pokrenuti, uvijek će se ponovno pokrenuti, samo će se ponovo pokrenuti u slučaju kvara ili samo kad je zaustavljen.
Evo primjera:
ponovno pokretanje: uvijekOvisi o
Usluge rade izolirano. Ali praktično, službe ne mogu puno učiniti izolirano. Mora postojati ovisnost o drugim uslugama. Na primjer, pozadinska usluga web aplikacije ovisit će o bazama podataka, uslugama predmemoriranja itd. Pomoću tipke "ovisi_on" možete dodati ovisnosti.
Evo primjera:
ovisi o:- db
To znači da će Docker Compose pokrenuti te usluge prije trenutne. Međutim, to ne osigurava da su te usluge spremne za upotrebu. Jedino jamstvo je da će se spremnici pokrenuti.
Okoliš
Aplikacije ovise o određenim varijablama. Zbog sigurnosti i jednostavnosti upotrebe izvlačite ih iz koda i postavljate kao varijable okruženja. Primjeri takvih varijabli su API ključevi, lozinke i tako dalje. To su uobičajene u web aplikacijama. Imajte na umu da ovaj ključ djeluje samo ako u toj usluzi nema direktive "build". Dakle, napravite sliku unaprijed.
Pogledaj ovo:
okoliš:API-KEY: 'ključ-api'
CONFIG: 'razvoj'
SESSION_SECRET: 'tajna'
Ako namjeravate koristiti direktivu "build" bez obzira na to, morat ćete definirati varijable okruženja u direktivi "args". Direktiva "args" pod-je direktiva "build".
Evo primjera:
izgraditi:kontekst: .
argumenti:
api-key: 'the-api-key'
config: 'razvoj'
session_secret: 'tajna'
Luke
Nijedan spremnik ne radi izolirano, unatoč tome što radi odvojeno od ostalih. Da biste osigurali vezu za komunikaciju s "vanjskim svijetom", morate mapirati luke. Mapirate port spremnika Docker na stvarnu priključku domaćina. Iz Dockera ste možda naišli na argument „-p“ koji se koristi za mapiranje portova. Direktiva o lukama djeluje slično argumentu "-p".
luke:- "5000: 8000"
Svezaka
Docker spremnici nemaju mogućnosti trajnog pohranjivanja podataka, pa gube podatke prilikom ponovnog pokretanja. S količinama možete to zaobići. Svesci omogućuju stvaranje trajne pohrane podataka. To čini montiranjem direktorija s domaćina dockera u direktorij spremnika dockera. Svezake možete postaviti i kao usluge najviše razine.
Evo primjera:
svezaka:- host-dir: / test / direktorij
Pri konfiguriranju svezaka dostupno je mnogo opcija, možete ih provjeriti.
Mreže
Mreže se također mogu stvoriti u uslugama. Pomoću mrežnog ključa možete postaviti umrežavanje za pojedine usluge. Ovdje možete postaviti upravljački program koji mreža koristi ako dopušta IPv6 itd. Možete postaviti mreže poput usluga, baš poput volumena.
Evo primjera:
mreže:- zadano
Mnogo je opcija prilikom konfiguriranja mreža, možete ih provjeriti.
Ulazna točka
Kada pokrenete spremnik, često morate pokrenuti određene naredbe. Na primjer, ako je usluga web aplikacija, morate pokrenuti poslužitelj. Ključ ulazne točke omogućuje vam to. Entrypoint djeluje poput ENTRYPOINT u Dockerfileu. Jedina razlika u ovom slučaju je u tome što sve što ovdje definirate poništava konfiguracije ENTRYPOINT u Dockerfileu.ulazna točka: rad tikvice
Evo primjera:
ulazna točka: rad tikviceDocker Compose naredbe
Nakon stvaranja datoteke Docker-Compose, morate pokrenuti određene naredbe da bi Compose funkcionirao. U ovom ćete odjeljku saznati neke glavne naredbe Docker Compose. Oni su:
- Docker-sastavi
- Docker-sastavi dolje
- Docker-skladati početak
- Stop zaustavljanja doker-skladanja
- Pauza za sastavljanje dokckera
- Ponovno zaustavi dock-compose
- Docker-sastavi ps
Docker-sastavi
Ova naredba Docker-compose pomaže u izgradnji slike, zatim stvara i pokreće Docker spremnike. Spremnici su iz usluga navedenih u datoteci za sastavljanje. Ako se spremnici već izvode, a vi pokrenete docker-compose, on stvara spremnik. Naredba je:
docker-sastavitiDocker-skladati početak
Ova naredba Docker-compose pokreće Docker spremnike, ali ne gradi slike niti stvara spremnike. Dakle, kontejnere pokreće samo ako su već stvoreni.
Stop zaustavljanja doker-skladanja
Često ćete trebati zaustaviti spremnike nakon stvaranja i pokretanja. Ovdje dobro dolazi naredba Docker-compose stop. Ova naredba u osnovi zaustavlja pokrenute usluge, ali spremnici i mreže za postavljanje ostaju netaknuti.
Naredba je:
Docker-sastavi dolje
Naredba Docker-compose down također zaustavlja Docker spremnike kao što to čini naredba stop. Ali to ide još više. Sastavite docker, ne samo da zaustavlja spremnike, već ih i uklanja. Mreže, volumeni i stvarne Dockerove slike također se mogu ukloniti ako koristite određene argumente. Naredba je:
docker-komponirati doljeAko namjeravate ukloniti sveske, specificirate dodavanjem -voluma. Na primjer:
docker-komponiraj dolje --tomoviAko namjeravate ukloniti slike, specificirate dodavanjem -rmi sve ili -rmi lokalni. Na primjer:
docker-compose down - rmi alldocker-compose down --rmi lokalni
Gdje svi uzrokuje da Docker Compose ukloni sve slike i lokalno uzrokuje da Docker Compose ukloni samo slike bez prilagođene oznake postavljene u polju 'slika'.
Pauza za sastavljanje dokckera
Postoje scenariji u kojima morate suspendirati spremnik, bez ubijanja ili brisanja. To možete postići naredbom Docker-compose pause. Pauzira aktivnosti tog spremnika, tako da ih možete nastaviti kada želite. Naredba je:
docker-compose stankaPonovno zaustavi dock-compose
Ponovno zaustavljanje docker-compose suprotno je naredbi pause docker-compose pause. Pomoću njega možete nastaviti obustavljene procese kao rezultat korištenja pauze Docker-compose. Naredba je:
docker-compose ponovno pokretanjeDocker-sastavi ps
Docker-compose ps navodi sve spremnike stvorene od usluga u datoteci Docker-Compose. Sličan je docker ps koji navodi sve spremnike koji se izvode na hostu dockera. Međutim, docker-compose ps specifičan je za spremnike iz datoteke Docker Compose. Naredba je:
docker-komponirati psSve to zajedno
Sad kad ste vidjeli neke ključne koncepte iza datoteke Docker Compose, spojimo sve to zajedno. Ispod je primjer datoteke Docker-Compose za web aplikaciju Python Django. Vidjet ćete raščlambu svakog retka u ovoj datoteci i vidjeti što rade.
inačica: '3'usluge:
db:
slika: postgres
mreža:
izgraditi: .
naredba: python upravljanje.py runserver 0.0.0.0: 8000
svezaka:
- .:/kodirati
luke:
- "8000: 8000"
ovisi o:
- db
Kratka priča je da se s ovom Docker-Compose datotekom kreira baza podataka PostgreSQL i pokreće django poslužitelj.
Duga priča je:
- Ova datoteka koristi verziju 3 Docker-Compose.
- Stvara dvije usluge. DB i web usluge.
- Usluga db koristi službenu docker postgres sliku.
- Web usluga gradi vlastitu sliku iz trenutnog direktorija. Budući da ne definira kontekst i tipke Dockerfile, očekuje se da Dockerfile po dogovoru dobije naziv "Dockerfile".
- Definirana je naredba koja će se pokrenuti nakon pokretanja spremnika.
- Volumen i priključci su definirani. Oboje koriste konvenciju mapiranja hosta: spremnika.
- Za volumen, trenutni direktorij “.”Preslikava se u direktorij„ / code ”unutar spremnika. To pomaže da podaci u spremniku postanu trajni, tako da se ne gube svaki put kada spremnik započne.
- Za priključak, priključak 8000 domaćina preslikava se u priključak spremnika 8000. Imajte na umu da web aplikacija radi na priključku 8000. Dakle, web aplikaciji se putem tog porta može pristupiti na hostu.
- Konačno, web usluga ovisi o db usluzi. Stoga će se web usluga pokrenuti tek kad se pokrene db spremnik.
- Više o datoteci Docker za aplikaciju Django i datoteci Docker Compose možete pronaći u dokumentaciji.
Zaključak
Ne morate biti stručnjak za Docker da biste koristili Docker Compose. Kao početnik koji ne namjerava savladati ovaj alat, u redu je naučiti što trebate sami. U ovom ste članku naučili osnove Docker Composea. Sada razumijete zašto je potreban Docker Compose, pogrešne usporedbe, kako postaviti konfiguracijsku datoteku Docker Compose i naredbe. Uzbudljivo je znati ove stvari, ali prava radost proizlazi iz njihova provođenja. Vrijeme je za posao.