BLACKBOXCentru de ajutor

Instalarea Docker și Docker Compose

Cum instalați Docker din depozitul oficial, cum rulați aplicații cu Compose și ce trebuie să știți despre porturi, jurnale, spațiu și memorie.

generalActualizat 2026-10-09~8 min de citit
Pe această pagină

Docker rulează aplicații în containere izolate, iar Docker Compose pornește mai multe containere dintr-un singur fișier. Serverele VPS BLACKBOX nu au Docker preinstalat: îl instalați dvs., după ce vă conectați la server prin SSH ca root (Conectarea la server prin SSH (Windows, macOS, Linux)). Comenzile urmează documentația oficială Docker.

Disponibil pentru: oricine are acces root prin SSH la un server BLACKBOX cu Ubuntu, Debian, AlmaLinux 9 sau CentOS Stream 9. Panoul app.blackbox.md nu instalează și nu gestionează containere pe serverele comandate pe blackbox.md.

Înainte de a începe

  • Docker publică pentru fiecare distribuție lista versiunilor suportate. Ubuntu 20.04 și Debian 11 nu mai sunt în această listă. Pentru un server nou cu Docker alegeți Ubuntu 24.04 LTS, Ubuntu 22.04 LTS sau Debian 12: Sistemele de operare disponibile.
  • Dacă aveți un plan „VPS hosting” cu panou de control, întrebați suportul înainte să instalați Docker: serverul web al panoului ocupă, de regulă, deja porturile 80 și 443. Vedeți Planurile „VPS hosting” cu panou de control.

Instalarea Docker Engine și a pluginului Compose

Pachetul docker-compose-plugin aduce comanda docker compose (cu spațiu). Vechea comandă docker-compose (cu cratimă) nu mai este necesară.

Ubuntu și Debian

Rulați comenzile în aceeași sesiune. . /etc/os-release citește numele distribuției (ubuntu sau debian) și numele de cod al versiunii (de exemplu noble sau bookworm), așa că blocul este același pe ambele sisteme.

apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
. /etc/os-release
curl -fsSL https://download.docker.com/linux/$ID/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$ID $VERSION_CODENAME stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Serviciul docker pornește singur după instalare și la fiecare repornire a serverului.

AlmaLinux și CentOS Stream

Documentația Docker nu are o pagină pentru AlmaLinux. Pe AlmaLinux 9 funcționează depozitul pentru CentOS de mai jos.

dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

Verificați instalarea

docker run hello-world
docker compose version

Prima comandă descarcă o imagine de test și afișează „Hello from Docker!”. A doua afișează „Docker Compose version”, urmat de numărul versiunii instalate.

Un utilizator fără root (opțional)

Dacă lucrați cu un utilizator obișnuit (creat ca în Securizarea unui server nou: lista de verificare), adăugați-l în grupul docker:

usermod -aG docker NUME_UTILIZATOR

Deconectați-vă și conectați-vă din nou ca NUME_UTILIZATOR. Comenzile docker funcționează apoi fără sudo.

Securitate Grupul docker echivalează cu acces root: un membru al grupului poate porni un container cu tot discul serverului montat și poate modifica orice fișier. Adăugați în grup doar utilizatori cărora le-ați da și acces root.

Limitați jurnalele containerelor

Implicit, Docker păstrează tot ce afișează un container, în fișiere *-json.log din /var/lib/docker/containers/, fără limită de mărime. Un container care scrie mult poate umple discul. Setați rotirea jurnalelor imediat după instalare:

  1. Deschideți fișierul de configurare. Pe AlmaLinux și CentOS Stream, instalați întâi editorul nano:

    dnf install -y nano
    mkdir -p /etc/docker
    nano /etc/docker/daemon.json
  2. Scrieți conținutul de mai jos. Dacă fișierul are deja setări, adăugați cele două chei în obiectul existent, nu un al doilea bloc { }.

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
  3. Verificați fișierul. Rezultatul corect este „configuration OK”. Dacă fișierul are o greșeală, serviciul docker nu mai pornește și, odată cu el, nici containerele.

    dockerd --validate --config-file=/etc/docker/daemon.json
  4. Reporniți Docker. Containerele se opresc pentru scurt timp; cele cu restart: unless-stopped sau restart: always pornesc din nou singure.

    systemctl restart docker

Fiecare container păstrează astfel cel mult 3 fișiere de câte 10 MB. Setarea se aplică doar containerelor create după schimbare: recreați containerele unui proiect Compose din folderul proiectului, iar pe cele pornite cu docker run ștergeți-le și creați-le din nou.

docker compose up -d --force-recreate

Porturile: ce ajunge în internet

  • Filtrul de rețea administrat de BLACKBOX lasă să treacă implicit doar SSH (22), HTTP (80), HTTPS (443) și ping. Un container publicat pe 8080 sau 3000 nu este accesibil din internet. Pentru alt port, scrieți suportului: Cum contactați suportul BLACKBOX.
  • Docker ocolește firewall-ul din sistem. Pentru porturile publicate (-p sau ports:), Docker scrie propriile reguli iptables, aplicate înaintea regulilor ufw: ufw status nu le arată, iar o regulă deny nu le închide. Nici pe firewalld nu vă bazați pentru a ascunde un port publicat de Docker.

Atenție Un container publicat pe 80, pe 443 sau pe un port deschis la cererea dvs. este accesibil din internet indiferent de ufw sau firewalld. Nu publicați bazele de date și panourile de administrare pe toate adresele serverului.

Cum publicați corect:

  1. Publicați aplicația doar pe 127.0.0.1 ("127.0.0.1:8080:80" în loc de "8080:80") și expuneți-o prin nginx pe 80/443, cu HTTPS: Aplicații Node.js, Python și alte servicii: nginx ca reverse proxy. Pe AlmaLinux și CentOS Stream, ghidul arată și setarea SELinux necesară.
  2. Containerele care comunică doar între ele (de exemplu baza de date) nu au nevoie de ports:: în același proiect Compose se găsesc după numele serviciului, de exemplu db.
  3. Un container proxy (nginx, Caddy, Traefik) poate fi publicat direct pe 80 și 443. Atunci nu rulați în paralel nginx sau Apache pe server, altfel pornirea dă eroarea address already in use.
  4. Pentru filtrare avansată, adăugați reguli în lanțul DOCKER-USER, după documentația Docker despre iptables. Regulile adăugate manual se pierd la repornire dacă nu le salvați.

Primul proiect cu Docker Compose

Exemplul pornește WordPress cu o bază de date MariaDB. Site-ul ascultă doar pe 127.0.0.1:8080, iar datele stau în volume cu nume. Apoi îl publicați pe domeniu prin nginx, ca la punctul 1 de mai sus.

  1. Creați folderul proiectului:

    mkdir -p /srv/wordpress
    cd /srv/wordpress
  2. Creați fișierul .env cu parola bazei de date. Compose îl citește automat. Folosiți în parolă doar litere fără diacritice și cifre: caracterul $ din acest fișier este interpretat de Compose ca variabilă.

    nano .env
    DB_PASSWORD=O_PAROLA_LUNGA

    Lăsați acces la fișier doar utilizatorului root:

    chmod 600 .env
  3. Creați fișierul compose.yaml:

    nano compose.yaml
    services:
      db:
        image: mariadb:11
        restart: unless-stopped
        environment:
          MARIADB_DATABASE: wordpress
          MARIADB_USER: wordpress
          MARIADB_PASSWORD: ${DB_PASSWORD}
          MARIADB_RANDOM_ROOT_PASSWORD: "1"
        volumes:
          - db-data:/var/lib/mysql
    
      wordpress:
        image: wordpress:latest
        restart: unless-stopped
        depends_on:
          - db
        environment:
          WORDPRESS_DB_HOST: db
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
          WORDPRESS_DB_NAME: wordpress
        ports:
          - "127.0.0.1:8080:80"
        volumes:
          - wp-data:/var/www/html
    
    volumes:
      db-data:
      wp-data:
  4. Porniți proiectul și verificați:

    docker compose up -d
    docker compose ps
    curl -I http://127.0.0.1:8080

    Un răspuns care începe cu HTTP/1.1 înseamnă că site-ul rulează. Dacă primiți o eroare imediat după pornire, așteptați câteva secunde: la prima pornire baza de date se inițializează.

Cu restart: unless-stopped, containerele pornesc singure după o repornire a serverului. Comenzile Compose se rulează din folderul proiectului:

Comanda Ce face
docker compose up -d creează și pornește containerele în fundal
docker compose logs -f urmărește jurnalele; ieșiți cu Ctrl+C
docker compose pull, apoi docker compose up -d descarcă imaginile noi și recreează containerele care le folosesc
docker compose down oprește și șterge containerele; volumele cu date rămân
docker compose down -v șterge și volumele, adică toate datele proiectului

Datele: volume și copii de rezervă

Containerele sunt de unică folosință: la actualizare, Compose le șterge și le creează din nou, iar tot ce a scris aplicația în afara unui volum se pierde. Păstrați datele:

  • în volume cu nume, ca db-data și wp-data din exemplu. Docker le ține în /var/lib/docker/volumes/, iar Compose adaugă în față numele proiectului (al folderului): wordpress_db-data;
  • sau în foldere de pe server montate în container (bind mount), de exemplu ./uploads:/app/uploads, pe care le copiați ușor cu rsync.

Salvați volumele și fișierele compose.yaml și .env, nu containerele: imaginile și containerele se recreează oricând. Pentru baza de date faceți un dump, nu copiați fișierele unei baze care rulează:

mkdir -p /root/backup
cd /srv/wordpress
docker compose exec -T db sh -c 'mariadb-dump -u wordpress -p"$MARIADB_PASSWORD" wordpress' > /root/backup/wordpress.sql

Aflați numele exact al volumului, apoi arhivați-l cu un container temporar:

docker volume ls
docker run --rm -v wordpress_wp-data:/data:ro -v /root/backup:/backup alpine tar czf /backup/wp-data.tar.gz -C /data .

BLACKBOX nu face copii automate ale serverului dvs. Mutați copiile pe alt server sau într-un spațiu de stocare extern: Strategia de backup pentru serverul dvs..

Eliberarea spațiului ocupat de Docker

Vedeți cât ocupă imaginile, containerele, volumele și cache-ul de build și cât se poate elibera (coloana RECLAIMABLE):

docker system df
Comanda Ce șterge
docker image prune imaginile fără etichetă (<none>), rămase după actualizări
docker image prune -a toate imaginile pe care nu le folosește niciun container
docker builder prune cache-ul de build
docker system prune containerele oprite, rețelele nefolosite, imaginile fără etichetă și cache-ul de build
docker system prune -a în plus, toate imaginile nefolosite

Fiecare comandă cere confirmarea înainte de ștergere. Dacă discul este deja plin, inclusiv din cauza jurnalelor vechi ale containerelor, vedeți Discul serverului este plin.

Risc docker system prune șterge și containerele oprite: un proiect oprit cu docker compose stop își pierde containerele (le recreați cu docker compose up -d). Nu adăugați --volumes și nu rulați docker volume prune -a dacă nu știți exact ce volume se șterg: volumele unui proiect oprit cu docker compose down sunt considerate nefolosite, iar datele lor se pierd definitiv.

Memoria pe planurile mici

Fiecare container consumă memorie. O bază de date, o aplicație și un proxy pot depăși împreună memoria planurilor Basic XS (1 GB), Basic S, CPU S și Standard S (2 GB): Planurile VPS: cum alegeți. Verificați consumul și dacă un container a fost oprit din lipsă de memorie (rezultatul true confirmă):

free -h
docker stats --no-stream
docker inspect --format '{{.State.OOMKilled}}' NUME_CONTAINER

Ce puteți face:

Și imaginile ocupă loc: pe discurile de 20–30 GB verificați periodic docker system df. La familiile CPU și High-Frequency Compute, discul rămâne același și după upgrade.

Întrebări frecvente

De ce nu văd containerele în panoul app.blackbox.md? Panoul nu afișează și nu gestionează containerele de pe serverele comandate pe blackbox.md. Le administrați prin SSH, cu docker și docker compose.

Containerul rulează, dar aplicația nu se deschide din internet. De ce? Cel mai des aplicația este publicată pe alt port decât 80 sau 443, pe care filtrul de rețea îl oprește, ori doar pe 127.0.0.1. Publicați-o prin nginx pe 80/443 sau cereți suportului deschiderea portului. Alte cauze: Site-ul nu se deschide.

La descărcarea unei imagini apare eroarea toomanyrequests. Ce fac? Docker Hub limitează descărcările fără cont. Creați un cont gratuit pe Docker Hub, autentificați-vă pe server cu comanda de mai jos și repetați descărcarea.

docker login

Cum actualizez Docker? Pachetele Docker se actualizează odată cu sistemul, cu apt upgrade sau dnf upgrade; pe Ubuntu și Debian, actualizările automate de securitate nu le includ. La actualizare, containerele se opresc pentru scurt timp. Detalii: Actualizări de sistem și actualizări automate de securitate.

N-ați găsit răspunsul?Scrieți-ne și echipa de suport vă răspunde. support@blackbox.md
Deschideți un tichet