Cuprins

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:

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.

# 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

Configurare inițială

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.

Utilizare de bază

Imagini

# 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

Containere

# 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

Interacțiune cu containerele

# 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

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:

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

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

Întreținere

Î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

Resurse utile