Table of Contents

Sesiuna 8 - Introducere Docker Swarm

Notiuni invatate:

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

docker swarm init

trebuie data pe un nod de inceput

Nodul poate fi calculatorul vostru, un server extern, o masina virtuala, orice

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

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

docker node ls

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 Documentatia Oficiala

Pentru a putea interactiona cu servicii, Docker Swarm trebuie initializat!

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

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

Orice creat intr-o stiva (serviciu, volum, retea, secret) va fi prefixat de NUME-STIVA_

Retelele dintr-o stiva de servicii sunt, by default, overlay

Stivele de servicii nu accepta fisiere .env la fel, spre deosebire de Docker Compose.

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 deployment.

Pentru a lansa o stiva de servicii, se executa comanda

docker stack deploy -c NUME_FISIER.yml NUME_STIVA

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

Pentru a actualiza configurarea unei stive, se da aceeasi comanda de deploy ca si in cazul lansarii initiale

Portainer

Portainer este un utilitar foarte bun de manangement al unui cluster de Docker Swarm. Se poate porni folosind scriptul oficial

Exercitii

  1. 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
  2. Creati-va 2 masini virtuale pe Linode si introduceti cod-ul oferit in cadrul cursului. Va recomandam sa folositi un card Revolut
  3. Instalati-va docker pe fiecare masina folosind scriptul de instalare
  4. Initiati clusterul de Swarm pe o masina
  5. Adaugati cealalta masina ca si worker in cluster
  6. Pe masina manager trageti monorepo-ul si lansati in executie stiva de servicii. Denumiti stiva de servicii mobyworkshop-testing
  7. Testati cu Postman
  8. Puneti Portainer pe cluster