From dc7c250d8ee432b75465f4b87ad69fac31628f9f Mon Sep 17 00:00:00 2001 From: Marius Grosu Date: Tue, 13 Jan 2026 18:00:13 +0200 Subject: [PATCH] Docker - Practice commands --- .gitignore | 31 +++++++++ docker_exercises.sh | 155 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 .gitignore create mode 100644 docker_exercises.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f2c1df --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# ---> macOS +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +#Custom file +.env diff --git a/docker_exercises.sh b/docker_exercises.sh new file mode 100644 index 0000000..6f5a10c --- /dev/null +++ b/docker_exercises.sh @@ -0,0 +1,155 @@ +# #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}}'