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.
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-pluginServiciul 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 dockerVerificați instalarea
docker run hello-world
docker compose versionPrima 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_UTILIZATORDeconectați-vă și conectați-vă din nou ca NUME_UTILIZATOR. Comenzile docker funcționează apoi fără sudo.
Securitate Grupul
dockerechivalează 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:
Deschideți fișierul de configurare. Pe AlmaLinux și CentOS Stream, instalați întâi editorul
nano:dnf install -y nanomkdir -p /etc/docker nano /etc/docker/daemon.jsonScrieț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" } }Verificați fișierul. Rezultatul corect este „configuration OK”. Dacă fișierul are o greșeală, serviciul
dockernu mai pornește și, odată cu el, nici containerele.dockerd --validate --config-file=/etc/docker/daemon.jsonReporniți Docker. Containerele se opresc pentru scurt timp; cele cu
restart: unless-stoppedsaurestart: alwayspornesc 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-recreatePorturile: 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 (
-psauports:), Docker scrie propriile reguli iptables, aplicate înaintea regulilor ufw:ufw statusnu le arată, iar o regulădenynu 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:
- 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ă. - 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 exempludb. - 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. - 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.
Creați folderul proiectului:
mkdir -p /srv/wordpress cd /srv/wordpressCreați fișierul
.envcu 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 .envDB_PASSWORD=O_PAROLA_LUNGALăsați acces la fișier doar utilizatorului
root:chmod 600 .envCreați fișierul
compose.yaml:nano compose.yamlservices: 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:Porniți proiectul și verificați:
docker compose up -d docker compose ps curl -I http://127.0.0.1:8080Un 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șiwp-datadin 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.sqlAflaț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 cudocker compose stopîși pierde containerele (le recreați cudocker compose up -d). Nu adăugați--volumesși nu rulațidocker volume prune -adacă nu știți exact ce volume se șterg: volumele unui proiect oprit cudocker compose downsunt 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_CONTAINERCe puteți face:
- adăugați memorie swap: Adăugarea memoriei swap;
- limitați memoria unui container, cu linia
mem_limit: 512mla serviciul respectiv dincompose.yaml; - treceți la un plan mai mare: Upgrade server: trecerea la un plan mai mare.
Ș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 loginCum 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.