Docker este o platformă open source care permite rularea aplicațiilor în containere - medii izolate, ușoare și portabile, care conțin tot ce are nevoie o aplicație ca să funcționeze: cod, biblioteci, configurații. Spre deosebire de mașinile virtuale, containerele Docker nu virtualizează hardware-ul, ci împart kernel-ul sistemului gazdă, ceea ce le face mult mai rapide și mai puțin consumatoare de resurse.
Docker a devenit standardul de facto pentru deployment-ul aplicațiilor moderne, atât în homelab-uri, cât și în medii de producție.
Înainte de instalare, câteva noțiuni esențiale:
docker pull.docker-compose.yml.Metoda recomandată pe toate distribuțiile este instalarea din repozitoriul oficial Docker, nu din repozitoriile distribuției, deoarece versiunile din urmă pot fi mai vechi.
# Instalează dependențele necesare sudo apt update sudo apt install -y ca-certificates curl gnupg # Adaugă cheia GPG oficială Docker sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Adaugă repozitoriul Docker echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Instalează Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Instalează dependențele necesare sudo apt update sudo apt install -y ca-certificates curl gnupg # Adaugă cheia GPG oficială Docker sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Adaugă repozitoriul Docker echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Instalează Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Adaugă repozitoriul Docker sudo dnf -y install dnf-plugins-core sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo # Instalează Docker sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Pe Arch Linux, Docker este disponibil direct din repozitoriile oficiale, fără a fi nevoie de repozitorii suplimentare:
sudo pacman -S docker docker-compose
Pe openSUSE Tumbleweed și Leap, Docker se instalează din repozitoriile oficiale:
sudo zypper install docker docker-compose
După instalare, pașii următori sunt comuni tuturor distribuțiilor.
Pornește și activează serviciul Docker:
sudo systemctl enable --now docker
Adaugă utilizatorul curent în grupul docker pentru a putea rula comenzi Docker fără sudo:
sudo usermod -aG docker $USER
După această comandă, este necesar să te deloghezi și să te reloghezi (sau să rulezi newgrp docker în sesiunea curentă) pentru ca modificarea să aibă efect.
Verifică instalarea:
docker --version
docker run hello-world
Dacă totul funcționează corect, hello-world va descărca o imagine de test și va afișa un mesaj de confirmare.
# Caută o imagine pe Docker Hub docker search nginx # Descarcă o imagine docker pull nginx # Listează imaginile descărcate local docker images # Șterge o imagine docker rmi nginx
# Pornește un container (descarcă imaginea automat dacă nu există local) docker run nginx # Pornește un container în fundal (detached) docker run -d nginx # Pornește un container cu un nume și mapare de port docker run -d --name webserver -p 8080:80 nginx # Listează containerele active docker ps # Listează toate containerele (inclusiv cele oprite) docker ps -a # Oprește un container docker stop webserver # Pornește un container oprit docker start webserver # Șterge un container (trebuie să fie oprit) docker rm webserver # Șterge un container forțat (chiar dacă rulează) docker rm -f webserver
# Deschide un shell interactiv într-un container care rulează docker exec -it webserver bash # Pornește un container și deschide direct un shell docker run -it ubuntu bash # Vizualizează log-urile unui container docker logs webserver # Urmărește log-urile în timp real docker logs -f webserver
Fără volume, datele din container se pierd la ștergerea acestuia. Există două metode principale:
Bind mount - mapezi un director de pe sistemul gazdă direct în container:
docker run -d --name webserver \ -p 8080:80 \ -v /opt/mysite:/usr/share/nginx/html \ nginx
Volume Docker - gestionat de Docker, stocat în /var/lib/docker/volumes/:
# Creează un volume docker volume create mydata # Folosește volumul docker run -d --name db \ -v mydata:/var/lib/postgresql/data \ postgres # Listează volumele docker volume ls # Șterge un volume docker volume rm mydata
Docker Compose simplifică gestionarea aplicațiilor formate din mai multe containere. Configurația se definește într-un fișier docker-compose.yml.
Un exemplu simplu cu Nginx și un volum:
services: web: image: nginx:latest container_name: webserver ports: - "8080:80" volumes: - ./site:/usr/share/nginx/html restart: unless-stopped
Un exemplu mai complex, cu o aplicație web și o bază de date:
services: app: image: wordpress:latest container_name: wordpress ports: - "8080:80" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wpuser WORDPRESS_DB_PASSWORD: parola_secreta WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html restart: unless-stopped depends_on: - db db: image: mariadb:11 container_name: wordpress_db environment: MYSQL_DATABASE: wordpress MYSQL_USER: wpuser MYSQL_PASSWORD: parola_secreta MYSQL_ROOT_PASSWORD: root_parola_secreta volumes: - db_data:/var/lib/mysql restart: unless-stopped volumes: wp_data: db_data:
Comenzi utile Docker Compose (se rulează din directorul unde se află fișierul docker-compose.yml):
# Pornește toate serviciile (în fundal) docker compose up -d # Oprește toate serviciile docker compose down # Oprește și șterge și volumele (atenție: șterge datele!) docker compose down -v # Vizualizează log-urile tuturor serviciilor docker compose logs -f # Recreează un singur serviciu docker compose up -d --force-recreate app # Actualizează imaginile și repornește docker compose pull && docker compose up -d
În timp, Docker acumulează imagini, containere și volume nefolosite care ocupă spațiu pe disc. Curățarea periodică se poate face cu:
# Șterge toate resursele neutilizate (containere oprite, imagini orfane, rețele) docker system prune # Include și volumele nefolosite (atenție: ireversibil) docker system prune --volumes # Verifică spațiul ocupat de Docker docker system df