Această pagină poate fi doar citită. Poți vedea sursa, dar nu poți modifica pagina. Consultă administratorul dacă ești de părere că ceva este în neregulă. ====== Docker ====== 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. ===== Concepte de bază ===== Înainte de instalare, câteva noțiuni esențiale: * **Imagine (image)** - un șablon read-only din care se creează containerele. O imagine poate fi descărcată din Docker Hub sau construită local cu un Dockerfile. * **Container** - o instanță rulantă a unei imagini. Poate fi pornit, oprit, șters și recreat oricând. * **Docker Hub** - registrul public oficial de imagini Docker, de unde se descarcă imaginile cu comanda ''docker pull''. * **Volume** - mecanism de persistență a datelor în afara containerului. Fără volume, datele se pierd când containerul este șters. * **Docker Compose** - unealtă care permite definirea și rularea mai multor containere împreună, folosind un fișier ''docker-compose.yml''. ===== Instalare ===== 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. <tab-group> <tab title="Ubuntu"> <code bash> # 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 </code> </tab> <tab title="Debian"> <code bash> # 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 </code> </tab> <tab title="Fedora"> <code bash> # 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 </code> </tab> <tab title="Arch Linux"> Pe Arch Linux, Docker este disponibil direct din repozitoriile oficiale, fără a fi nevoie de repozitorii suplimentare: <code bash> sudo pacman -S docker docker-compose </code> </tab> <tab title="openSUSE"> Pe openSUSE Tumbleweed și Leap, Docker se instalează din repozitoriile oficiale: <code bash> sudo zypper install docker docker-compose </code> </tab> </tab-group> ===== Configurare inițială ===== După instalare, pașii următori sunt comuni tuturor distribuțiilor. **Pornește și activează serviciul Docker:** <code bash> sudo systemctl enable --now docker </code> **Adaugă utilizatorul curent în grupul ''docker''** pentru a putea rula comenzi Docker fără ''sudo'': <code bash> sudo usermod -aG docker $USER </code> 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:** <code bash> docker --version docker run hello-world </code> Dacă totul funcționează corect, ''hello-world'' va descărca o imagine de test și va afișa un mesaj de confirmare. ===== Utilizare de bază ===== ==== Imagini ==== <code bash> # 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 </code> ==== Containere ==== <code bash> # 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 </code> ==== Interacțiune cu containerele ==== <code bash> # 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 </code> ==== Volume ==== 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: <code bash> docker run -d --name webserver \ -p 8080:80 \ -v /opt/mysite:/usr/share/nginx/html \ nginx </code> **Volume Docker** - gestionat de Docker, stocat în ''/var/lib/docker/volumes/'': <code bash> # 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 </code> ===== Docker Compose ===== 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: <code yaml> services: web: image: nginx:latest container_name: webserver ports: - "8080:80" volumes: - ./site:/usr/share/nginx/html restart: unless-stopped </code> Un exemplu mai complex, cu o aplicație web și o bază de date: <code yaml> 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: </code> Comenzi utile Docker Compose (se rulează din directorul unde se află fișierul ''docker-compose.yml''): <code bash> # 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 </code> ===== Întreținere ===== În timp, Docker acumulează imagini, containere și volume nefolosite care ocupă spațiu pe disc. Curățarea periodică se poate face cu: <code bash> # Ș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 </code> ===== Resurse utile ===== * [[https://docs.docker.com|Documentația oficială Docker]] * [[https://hub.docker.com|Docker Hub]] - registrul public de imagini * [[https://docs.docker.com/compose/|Docker Compose]] - documentație oficială * [[https://github.com/docker/compose|Docker Compose pe GitHub]] {{tag>docker containere virtualizare instalare linux devops homelab}}