Differences

This shows you the differences between two versions of the page.

Link to this comparison view

moby:backend:06 [2020/05/31 20:09]
alexandru.hogea
moby:backend:06 [2020/08/08 14:30] (current)
alexandru.hogea
Line 1: Line 1:
-===== Sesiuna 6 - Dockerfiles si Docker ​Compose ​=====+===== Sesiuna 6 - Docker =====
  
-Vom impacheta serviciile create anterior in containere de docker ​si le vom lega impreuna folosind ​Docker ​Compose. Vom invata aspecte ce tin de Docker ​Compose care favorizeaza dezvoltarea rapida.+Concepte atinse: 
 +  * Teoria containerelor 
 +  * Necesitatea Docker 
 +  * Concepte Docker 
 +  * Crearea, compilarea ​si urcarea imaginilor ​Docker 
 +  * Rularea containerelor Docker 
 +  * Crearea ​de volume si retele ​Docker
  
-Vom modifica serviciile astfel incat sa vorbeasca intre ele conform DNS intern ​docker, si nu dupa ip si port.+==== Resurse teoretice: ==== 
 + 
 +Puteti accesa inregistrarea video si slide-urile teoretice [[https://​drive.google.com/​drive/​folders/​1T-j067IEPMc8skgxmyR7VjTMYUPF5YIy?​usp=sharing|aici]] 
 + 
 +==== Resurse practice: ===== 
 + 
 +=== Comenzi uzuale de Docker === 
 + 
 +<note tip>Va recomandam ​sa va documentati de pe [[https://​docs.docker.com/​reference/​|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</​note>​ 
 + 
 +== Comenzi de sistem == 
 + 
 +<code bash> 
 +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 
 +</​code>​ 
 + 
 +== Interactiune imagini == 
 + 
 +<code bash> 
 + 
 +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 
 +</​code>​ 
 + 
 +== Interactiune containere == 
 +<code bash> 
 +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 
 +</​code>​ 
 + 
 +== Interactiune Retele == 
 + 
 +<code bash> 
 +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 
 +</​code>​ 
 + 
 +== Interactiune Volume == 
 + 
 +<code bash> 
 +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 
 +</​code>​ 
 + 
 +=== Dockerfile si .dockerignore === 
 + 
 +<note tip>​Intotdeauna sa puneti o versiune **fixa** a unei imagini (niciodata latest). Update-ul neplanificat la o versiune noua poate cauza modificari neasteptate</​note>​ 
 + 
 +<note tip>​Intotdeauna sa aveti .dockerignore creat si sa va puneti in el lucruri de care nu aveti nevoie (ex: pachete care oricum sunt instalate)</​note>​ 
 + 
 +== 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: 
 +  * ce imagine de baza se foloseste (ce tehnologie/​sistem de operare) 
 +  * ce fisere trebuie sa fie copiate in imagine 
 +  * actiuni ce trebuie executate in imagine (e.g. __npm install__) 
 +  * cu ce comanda va porni containerul 
 + 
 +<code Dockerfile>​ 
 + 
 +FROM node:​14-alpine  
 + 
 +WORKDIR /​usr/​src/​app 
 + 
 +COPY package.* . 
 + 
 +RUN npm ci 
 + 
 +COPY . . 
 + 
 +CMD ["​npm",​ "​run",​ "​start"​] 
 + 
 +</​code>​ 
 + 
 +== .dockerignore == 
 + 
 +Are structura lui **.gitignore** 
 + 
 +<code .dockerignore>​ 
 +node_modules 
 +</​code>​ 
 + 
 +==== Exercitii ==== 
 + 
 +  - Construiti-va imagini de la cele 4 microservicii 
 +  - Creati-va 4 retele (3 pt library, notification,​ auth si bazele lor de date si 1 care sa cupleze cele 4 microservicii) 
 +  - Rulati cele 4 containere pentru microservicii 
 +  - Testati, cu POSTMAN, ca serviciile ruleaza bine 
 +  - Incarcati imaginile pe registry aferenti de pe repo-ul fiecarui microserviciu 
 + 
 +<note tip>​Hint:​ docker login registry.gitlab.com</​note>​ 
 + 
 +{{:​moby:​backend:​container_registry.png?1000|}}
moby/backend/06.1590944985.txt.gz · Last modified: 2020/05/31 20:09 by alexandru.hogea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0