Differences

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

Link to this comparison view

cc:laboratoare:01 [2021/10/08 12:13]
radu.ciobanu
cc:laboratoare:01 [2022/10/10 09:09] (current)
radu.ciobanu
Line 937: Line 937:
  
 ==== Exerciții ==== ==== Exerciții ====
 +
 +=== Comenzi de bază ===
  
   - Aduceți în cache-ul local imaginea **//​busybox//​** din registrul oficial Docker.   - Aduceți în cache-ul local imaginea **//​busybox//​** din registrul oficial Docker.
Line 943: Line 945:
   - Rulați un container interactiv detașat (daemon) de **//​busybox//​**. Odată ce l-ați pornit, atașați-vă la el și dați comanda **//id//**, apoi ieșiți.   - Rulați un container interactiv detașat (daemon) de **//​busybox//​**. Odată ce l-ați pornit, atașați-vă la el și dați comanda **//id//**, apoi ieșiți.
   - Ștergeți toate containerele și imaginile create la punctele precedente.   - Ștergeți toate containerele și imaginile create la punctele precedente.
-  - Pornind ​de la cele două fișiere din {{:​cc:​laboratoare:​homework1.zip|această arhivă}}, scrieți un Dockerfile care va crea o imagine urmărind pașii de mai jos:+ 
 +=== Crearea unei imagini === 
 + 
 +<note tip>​Pentru exercițiile următoare, veți porni de la {{:​cc:​laboratoare:​homework1.zip|această arhivă}}, care conține o aplicație simplă NodeJS.</​note>​ 
 + 
 +  - Pornind de la cele două fișiere din arhivă, scrieți un Dockerfile care va crea o imagine urmărind pașii de mai jos:
     - se va porni de la cea mai recentă versiune a imaginii oficiale de NodeJS, adică **//​node:​14.13.0-stretch//​**     - se va porni de la cea mai recentă versiune a imaginii oficiale de NodeJS, adică **//​node:​14.13.0-stretch//​**
     - se va copia fișierul **//​package.json//​** din arhivă în directorul curent (./); acest fișier are rolul de a specifica dependențele aplicației NodeJS (de exemplu, framework-ul Express.js)     - se va copia fișierul **//​package.json//​** din arhivă în directorul curent (./); acest fișier are rolul de a specifica dependențele aplicației NodeJS (de exemplu, framework-ul Express.js)
Line 952: Line 959:
   - Folosiți Dockerfile-ul scris anterior pentru a crea o imagine numita **//​nodejstest//​**.   - Folosiți Dockerfile-ul scris anterior pentru a crea o imagine numita **//​nodejstest//​**.
   - Porniți un container care să ruleze imaginea **//​nodejstest//​** pe portul 12345 în modul detașat (daemon). Verificați că funcționează corect intrând pe [[http://​127.0.0.1:​12345]].   - Porniți un container care să ruleze imaginea **//​nodejstest//​** pe portul 12345 în modul detașat (daemon). Verificați că funcționează corect intrând pe [[http://​127.0.0.1:​12345]].
 +
 +=== Lucrul cu rețele, volume și bind mounts ===
 +
 +<note tip>​Pentru exercițiile următoare, veți porni de la {{:​cc:​laboratoare:​homework2.zip|această arhivă}}, care conține o aplicație NodeJS care realizează un API de adăugare de cărți într-o bibliotecă peste o bază de date PostgreSQL. Exercițiile de mai jos vă trec prin pașii necesari pentru a rula un container pentru o bază de date PostgreSQL și containerul cu aplicația în aceeași rețea, având persistență la oprirea containerelor.</​note>​
 +
 +  - Pe baza surselor și a fișierului Dockerfile din arhiva de mai sus, construiți o imagine cu numele (tag-ul) **//​api-laborator-1-image//​**.
 +  - Creați o rețea bridge numită **//​laborator1-db-network//​**.
 +  - Creați un volum numit **//​laborator1-db-persistent-volume//​**.
 +  - Porniți în background un container pentru o bază de date cu următoarele caracteristici:​
 +    - se va atașa un bind mount care va face o mapare între fișierul **//​init-db.sql//​** de pe mașina locală (acesta va fi sursa la flag-ul de bind mount și se găsește în arhiva de laborator) și fișierul **///​docker-entrypoint-initdb.d/​init-db.sql//​** din containerul care se va rula (acesta va fi destinația)
 +    - se va atașa volumul **//​laborator1-db-persistent-volume//​** creat anterior (sursa) la calea **///​var/​lib/​postgresql/​data//​** din containerul care se va rula (destinația)
 +    - se va rula containerul în rețeaua **//​laborator1-db-network//​** creată anterior
 +    - se vor specifica următoarele variabile de mediu (într-o comandă de **//docker run//**, acest se lucru se face astfel: **//docker run -e NUME=valoare//​**):​
 +      - variabila **//​POSTGRES_USER//​** cu valoare **//​admin//​**
 +      - variabila **//​POSTGRES_PASSWORD//​** cu valoarea **//​admin//​**
 +      - variabila **//​POSTGRES_DB//​** cu valoarea **//​books//​**
 +    - containerul rulat se va numi **//​laborator1-db//​**
 +    - se va rula imaginea **//​postgres//​** din registrul oficial.
 +  - Porniți în background un container cu imaginea **//​api-laborator-1-image//​** creată anterior, cu următoarele caracteristici:​
 +    - se va rula containerul în rețeaua **//​laborator1-db-network//​** creată anterior
 +    - se vor specifica următoarele variabile de mediu:
 +      - variabila **//​PGUSER//​** cu valoare **//​admin//​**
 +      - variabila **//​PGPASSWORD//​** cu valoarea **//​admin//​**
 +      - variabila **//​PGDATABASE//​** cu valoarea **//​books//​**
 +      - variabila **//​PGHOST//​** cu valoarea **//​laborator1-db//​**
 +      - variabila **//​PGPORT//​** cu valoarea **//​5432//​**
 +    - containerul rulat se va numi **//​laborator1-api//​**
 +    - containerul va expune portul 80 și îl va mapa la portul 5555 de pe mașina locală.
 +  - Verificați că cele două containere rulează corect și au conectivitate:​
 +    - folosind [[https://​www.postman.com|Postman]] sau orice altă aplicație similară, realizați cereri de GET și POST pe [[http://​localhost:​5555/​api/​books]] (pentru un tutorial de Postman, puteți intra [[https://​learning.postman.com/​docs/​getting-started/​sending-the-first-request/​|aici]])
 +    - la cererile de POST, se așteaptă un body JSON cu formatul ''​%%{"​title":"​titlu","​author":"​autor"​}%%''​
 +    - cererile de GET vor returna o listă de cărți adăugate prin cereri de POST.
 +  - Verificați că volumul pe care l-ați adăugat păstrează persistența datelor:
 +    - opriți și ștergeți cele două containere
 +    - reporniți cele două containere cu aceleași comenzi ca anterior
 +    - trimiteți o cerere de GET
 +    - dacă ați configurat corect, veți primi o listă cu cărțile adăugate anterior.
cc/laboratoare/01.1633684409.txt.gz · Last modified: 2021/10/08 12:13 by radu.ciobanu
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