Docker - Practice commands
This commit is contained in:
155
docker_exercises.sh
Normal file
155
docker_exercises.sh
Normal file
@@ -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}}'
|
||||
Reference in New Issue
Block a user