Table of Contents

Sesiuna 6 - Docker

Concepte atinse:

Resurse teoretice:

Puteti accesa inregistrarea video si slide-urile teoretice aici

Resurse practice:

Comenzi uzuale de Docker

Va recomandam sa va documentati de pe site-ul oficial docker intrucat comenzile oferite de noi sunt minimul necesar de care aveti nevoie sa puteti lucra cu docker. In realitate sunt mult mai multe comenzi si fiecare comanda are mult mai multe argumente

Comenzi de sistem
docker NUME_COMANDA --help -> informatii complete despre o comanda
docker version -> versiunea si detalii minore despre docker
docker info -> informatii complete despre docker
docker system prune -> elibereaza spatiu utilizat inutil
docker login NUME_REGISTRU -> autentificarea pe un registru docker. Implicit este dockerhub
Interactiune imagini
docker image pull NUME_IMAGINE -> descarca imaginea in cache local
docker image push NUME_IMAGINE -> incarca imaginea in registry
 
docker build -t NUME_IMAGINE . -> construieste o imagine plecand de la Dockerfile care se afla in folderul curent
 
docker image rm NUME_IMAGINE -> sterge o imagine din cache local
docker rmi NUME_GIMAINGE -> sterge o imagine din cache local
 
docker image ls -> vizualizarea imaginilor descarcate
docker image inspect NUME_IMAGINE -> vizualizare informatii despre o imagine
Interactiune containere
docker run --name NUME_CONTAINER NUME_IMAGINE -> porneste un container plecand de la imaginea data ca parametru
 
docker run --name NUME_CONTAINER --network="NUME_RETEA" NUME_IMAGINE -> porneste un container pe care il leaga la reteaua data ca parametru
docker run --name NUME_CONTAINER -e "VAR1=VAL1" NUME_IMAGINE -> porneste un container caruia i se injecteaza variabila de mediu VAR1
docker run --name NUME_CONTAINER --volume "HOST:CALE_CONTAINER" NUME_IMAGINE -> porneste un container a carui CALE_CONTAINER este legata la un folder sau volum de pe host
docker run --name NUME_CONTAINER --mount type=bind,src=CALE_HOST,dst=CALE_CONTAINER NUME_IMAGINE -> porneste un container a carui CALE_CONTAINER este legata la folderul CALE_HOST
docker run --name NUME_CONTAINER --mount type=volume,src=NUME_VOLUM,dst=CALE_CONTAINER NUME_IMAGINE -> porneste un container a carui CALE_CONTAINER este legata la volumul NUME_VOLUM
 
docker run --name NUME_CONTAINER -it NUME_IMAGINE -> porneste containerul si ataseaza un terminal pentru interactiune
docker run --name NUME_CONTAINER -d NUME_IMAGINE -> porneste containerul in modul detached (in background)
 
docker exec -it NUME_CONTAINER NUME_COMANDA -> porneste un terminal in container si executa o comanda. De obicei NUME_COMANDA este bash sau sh pentru a se putea interactiona cu containerul
 
docker stop NUME_CONTAINER -> inchide containerul 
 
docker restart NUME_CONTAINER -> reporneste containerul
 
docker container rm NUME_CONTAINER -> sterge un container
 
docker ps -> vizualizarea containerelor care ruleaza
docker container ls -> vizualizarea containerelor care ruleaza
docker container inspect NUME_CONTAINER -> vizualizare informatii despre un container
docker logs NUME_CONTAINER -> vizualizare logs din interiorul unui container
docker top NUME_CONTAINER -> vizualizare procese care ruleaza intr-un container
Interactiune Retele
docker network create --driver NUME_DRIVER NUME_RETEA -> creaza o retea cu driver-ul NUME_DRIVER. Implicit este bridge
docker network rm NUME_RETEA -> sterge o retea
 
docker network connect NUME_RETEA NUME_CONTAINER -> conecteaza un container la o retea
docker network disconnect NUME_RETEA NUME_CONTAINER -> deconecteaza un container de la o retea
 
docker network ls -> vizualizarea retelelor create
docker network inspect NUME_RETEA -> vizualizare informatii despre o retea
Interactiune Volume
docker volume create NUME_VOLUM -> creaza un volum
 
docker volume rm NUME_VOLUM -> sterge un volum
 
docker volume ls -> afiseaza toate volumele
docker volume inspect NUME_VOLUM -> afiseaza informatii despre un volum

Dockerfile si .dockerignore

Intotdeauna sa puneti o versiune fixa a unei imagini (niciodata latest). Update-ul neplanificat la o versiune noua poate cauza modificari neasteptate

Intotdeauna sa aveti .dockerignore creat si sa va puneti in el lucruri de care nu aveti nevoie (ex: pachete care oricum sunt instalate)

Dockerfile

Este un fisier necesar crearii imaginilor docker. Fiecare linie din Dockerfile descrie un strat din imagine.

De cele mai multe ori Dockerfile trebuie sa descrie urmatoarele actiuni:

FROM node:14-alpine 
 
WORKDIR /usr/src/app
 
COPY package.* .
 
RUN npm ci
 
COPY . .
 
CMD ["npm", "run", "start"]
.dockerignore

Are structura lui .gitignore

node_modules

Exercitii

  1. Construiti-va imagini de la cele 4 microservicii
  2. Creati-va 4 retele (3 pt library, notification, auth si bazele lor de date si 1 care sa cupleze cele 4 microservicii)
  3. Rulati cele 4 containere pentru microservicii
  4. Testati, cu POSTMAN, ca serviciile ruleaza bine
  5. Incarcati imaginile pe registry aferenti de pe repo-ul fiecarui microserviciu

Hint: docker login registry.gitlab.com