156 lines
4.6 KiB
Bash
156 lines
4.6 KiB
Bash
# #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}}'
|