This shows you the differences between two versions of the page.
moby:backend:08 [2020/05/31 20:11] alexandru.hogea removed |
moby:backend:08 [2020/08/16 15:17] (current) alexandru.hogea [Exercitii] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Sesiuna 8 - Deploy in cluster de Docker Swarm ===== | + | ===== Sesiuna 8 - Introducere Docker Swarm ===== |
- | Vom crea un cluster de Docker Swarm din mai multe masini virtuale si vom deploya serviciile noastre acolo. Vom folosi doua medii, de test si de productie. | + | Notiuni invatate: |
+ | |||
+ | * Initializare nod Swarm | ||
+ | * Adaugare nod in Swarm | ||
+ | * Creare de servicii Swarm | ||
+ | * Deployment de stiva de servicii | ||
+ | |||
+ | ==== Resurse Teoretice ==== | ||
+ | |||
+ | Puteti accesa slide-urile teoretice [https://drive.google.com/drive/folders/1p5daLH2CFmlNJ1-gd7-kLMzdnFbiyTCZ?usp=sharing|aici]] | ||
+ | |||
+ | ==== Resurse Practice ==== | ||
+ | |||
+ | === Docker Swarm === | ||
+ | |||
+ | Docker Swarm este nativ Docker (spre deosebire de docker-compose, care este un tool separat). | ||
+ | |||
+ | Pentru a initializa un cluster de Swarm, comanda | ||
+ | <code bash> | ||
+ | docker swarm init | ||
+ | </code> | ||
+ | trebuie data pe un nod de inceput | ||
+ | |||
+ | <note tip>Nodul poate fi calculatorul vostru, un server extern, o masina virtuala, orice</note> | ||
+ | |||
+ | <note tip>Comanda de init va genera 2 comenzi pe care va trebui sa le folositi sa introduceti alte noduri in cluster. Una este pt worker, alta este pt manager</note> | ||
+ | |||
+ | Pentru a adauga alte masini la cluster, este nevoie sa folositi comenzile generate atunci cand ati dat **init**. Atentie, ele sunt diferite in functie de worker sau manager | ||
+ | |||
+ | Pentru a vedea cate noduri aveti in cluster, puteti rula comanda | ||
+ | <code bash> | ||
+ | docker node ls | ||
+ | </code> | ||
+ | |||
+ | de pe un nod manager | ||
+ | === Servicii Docker === | ||
+ | |||
+ | Un serviciu Docker lanseaza taskuri ce rezulta in containere. Sintaxa pentru servicii docker este foarte asemanatoare cu sintaxa pentru containere de docker. Ca si intotdeauna, va recomandam sa consultati [[https://docs.docker.com/engine/reference/commandline/service/|Documentatia Oficiala]] | ||
+ | |||
+ | <note tip>Pentru a putea interactiona cu servicii, **Docker Swarm** trebuie initializat!</note> | ||
+ | <code bash> | ||
+ | docker service create --name NUME_SERVICIU IMAGINE_DOCKER -> creaza un serviciu pornind de la o imagine | ||
+ | docker service ls -> afiseaza toate serviciile din sistem | ||
+ | docker service inspect NUME_SERVICIU -> afiseaza informatii despre un serviciu | ||
+ | docker service logs –f NUME_SERVICIU -> afiseaza logurile unui serviciu | ||
+ | docker service ps NUME_SERVICIU (arata taskurile si starea lor, foarte buna pt debug) -> afiseaza taskurile si statusurile lor pentru un serviciu | ||
+ | docker service update --replicas 3 NUME_SERVICIU -> actualizeaza serviciul, replicand containerele de 3 ori | ||
+ | docker service rm NUME_SERVICIU -> sterge un serviciu | ||
+ | |||
+ | </code> | ||
+ | |||
+ | === Stive de Servicii Docker === | ||
+ | |||
+ | O stiva de servicii reprezinta mai multe servicii grupate in acelasi namespace. Comportamentul este similar cu Docker Compose, doar ca politica de denumire este alta | ||
+ | <note tip>Orice creat intr-o stiva (serviciu, volum, retea, secret) va fi prefixat de **NUME-STIVA_** </note> | ||
+ | <note tip>Retelele dintr-o stiva de servicii sunt, by default, **overlay**</note> | ||
+ | <note important>Stivele de servicii **nu accepta** fisiere .env la fel, spre deosebire de Docker Compose. </note> | ||
+ | |||
+ | Referirea serviciilor in cadrul unei stive se face, la fel ca si in cazul serviciilor simple sau al containerelor, dupa **numele serviciului**. Totusi, va recomandam sa folositi mereu si **prefixul oferit de stiva**. | ||
+ | |||
+ | O stiva se genereaza pe baza unui fisier de tip **compose** ce are format **.yml**. In afara optiunilor care sunt folosite de Docker Compose, se mai pot introduce detalii de configurare ce tin de [[https://docs.docker.com/compose/compose-file/#deploy|deployment]]. | ||
+ | |||
+ | Pentru a lansa o stiva de servicii, se executa comanda | ||
+ | <code bash> | ||
+ | docker stack deploy -c NUME_FISIER.yml NUME_STIVA | ||
+ | </code> | ||
+ | |||
+ | <note important>Daca folositi un registru diferit de Dockerhub (precum registry.gitlab.com) este nevoie sa fiti **autentificati** si sa puneti si optiunea **--with-registry-auth** atunci cand lansati o stiva de servicii</note> | ||
+ | |||
+ | <note tip>Pentru a actualiza configurarea unei stive, se da aceeasi comanda de deploy ca si in cazul lansarii initiale</note> | ||
+ | |||
+ | === Portainer === | ||
+ | |||
+ | Portainer este un utilitar foarte bun de manangement al unui cluster de Docker Swarm. Se poate porni folosind [[https://portainer.readthedocs.io/en/stable/deployment.html#inside-a-swarm-cluster|scriptul oficial]] | ||
+ | |||
+ | |||
+ | ==== Exercitii ==== | ||
+ | |||
+ | - Creati-va fisierul **.yml** pentru stiva de servicii si puneti-l in folderul Staging (sau cum se numeste in cazul vostru folderul aferent mediului de testing) din cadrul Monorepo/Deployment | ||
+ | - Creati-va 2 masini virtuale pe Linode si introduceti cod-ul oferit in cadrul cursului. Va recomandam sa folositi un card Revolut | ||
+ | - Instalati-va docker pe fiecare masina folosind [[https://github.com/docker/docker-install|scriptul de instalare]] | ||
+ | - Initiati clusterul de Swarm pe o masina | ||
+ | - Adaugati cealalta masina ca si **worker** in cluster | ||
+ | - Pe masina **manager** trageti monorepo-ul si lansati in executie stiva de servicii. Denumiti stiva de servicii mobyworkshop-testing | ||
+ | - Testati cu Postman | ||
+ | - Puneti Portainer pe cluster |