# #Documentatie: # https://docs.docker.com/reference/cli/docker/network/create/ # https://docs.docker.com/reference/cli/docker/network/ls/ # https://docs.docker.com/engine/network/drivers/bridge/ # https://docs.docker.com/reference/cli/docker/container/run/ # https://labex.io/tutorials/docker-how-to-test-connectivity-between-docker-containers-411613 # https://docs.docker.com/engine/network/ # https://docs.docker.com/reference/cli/docker/network/connect/ # EXERCITIUL 1 – Retea Docker custom #1 Creeaza o retea Docker custom numita: lab_network #2 Verifica ca reteaua exista. #3 Inspecteaz-o si identifica: # subnetul # gateway-ul # driverul folosit #Rezolvare: #1. Commnad to create a docker bridge network docker network create -d bridge lab_network #2. Command to list all docker network docker network ls #3. Commnad to inspect a docker network: docker network inspect lab_network #EXERCITIUL 2 – Containere in aceeasi retea (DNS intern) #1 Ruleaza un container nginx: #nume: web #conectat la lab_network #ruleaza in background #2 Ruleaza un container alpine: #nume: client #conectat la lab_network #interactiv (-it) #3 Din containerul client: #testeaza conectivitatea catre web #foloseste numele containerului, nu IP #Restrictii #NU folosi -p #NU folosi IP hardcodat #Rezolvare: #1. Comanda rulare container ngninx docker run --name web \ --network lab_network -d \ nginx:perl #2. Comanda rulare container alpine docker run --name client \ --network lab_network -it \ alpine:3.23.2 #3. Testare conectivitate nefolosind -p si IP hardcodat ci DNS docker exec client ping -c 4 web #EXERCITIUL 3 – Port mapping (acces din exterior) #1. Opreste containerul web #2. Porneste-l din nou astfel incit: #nginx sa fie accesibil din browser #portul de pe host sa NU fie 80 #3. Acceseaza nginx din browser folosind: http://172.17.0.2:8080 #Rezolvare: #1. Oprire container docker ps docker stop web docker rm web #2. Pornire docker nou cu port pe 8080 docker run --name web --network lab_network -p 8080:80 -d nginx:perl #3. Acceseaza nginx din browser folosind: http://172.17.0.2:8080 - Apare pagina de la ngnix # EXERCITIUL 4 – Volume mapping (persistenta datelor) #1 Creeaza pe host un director dedicat pentru continut web #2 Ruleaza containerul web astfel incat: # directorul de pe host sa fie mapat in container # nginx sa serveasca fisierele din acel director #3 Creeaza / modifica un fisier HTML pe host #4 Verifica din browser ca modificarile apar fara restart de container # Ce trebuie sa demonstrezi # diferenta intre filesystem container vs host # persistenta datelor # bind mount functional #Rezolvare: #1. Creare director pentru continut web mkdir ~/Documents/docker_lab/html #2. Rulare container web cu mapare volume docker run --name web \ --network lab_network \ -p 8080:80 \ -v ~/Documents/docker_lab/html:/usr/share/nginx/html \ -d nginx:perl #3. Creare fisier index.html pe host touch ~/Documents/docker_lab/html/index.html # EXERCITIUL 5 – Inspect si debugging #1 Foloseste docker inspect pe containerul web #2 Identifica: # IP-ul containerului # reteaua in care este # volumele mapate #3 Intra in container si verifica: # ce procese ruleaza # unde este montat volumul # Ce trebuie sa inveti # cum verifici o configuratie fara sa „ghicesti” # debugging de baza in productie #Rezolvare: #1. Folosim comanda inspect docker inspect web #2. Cu docker inspect gasim reteaua, ip, volumul #3. Pentru a lista procesele de pe un container docker top web docker inspect web --format '{{.State.Pid}}' #din interiorul containerului ps -ef cat /proc/1/cmdline # EXERCITIUL 6 – Curatenie controlata #1 Opreste toate containerele din laborator docker stop #2 Sterge containerele #3 Sterge reteaua custom #4 Verifica ca: # nu mai exista containere # reteaua a fost eliminata # volumele de pe host NU au fost sterse #Rezolvare #1. Oprire toate containerele docker stop $(docker ps -q) #2. Stergerea tuturor containerelor docker rm $(docker ps -a -q) #3. Stergere retea comuna docker network rm lab_network #. Verificare containere: docker ps -a #. Verificare retea docker network ls #. Verificare volume bind mount pe host ls -la ~/Documents/homelab/html #. Stergerea tuturor volumelor docker volume ls docker volume prune --all #####Creare docker volume pentru diferentie cu bind volume docker volume create web_data docker run --name web \ -p 8080:80 \ -v web_data:/usr/share/nginx/html \ -d nginx:perl ## pentru verificare entrypoint aplicatie folosim: docker inspect nginx --format '{{.Config.Entrypoint}} {{.Config.Cmd}}'