Files
docker-lab/docker_exercises.sh

156 lines
4.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# #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}}'