Docker a fost adoptat pe scară largă și este utilizat pentru a rula și scala aplicațiile în producție. În plus, poate fi folosit pentru a porni rapid aplicațiile executând o singură comandă Docker.

De asemenea, companiile investesc din ce în ce mai mult efort în îmbunătățirea dezvoltării în containere Docker locale și la distanță, ceea ce oferă și multe avantaje.

Puteți obține informații de bază despre configurația Docker executând:

$ docker info

...
 Storage Driver: overlay2
 Docker Root Dir: /var/lib/docker
...

Ieșirea conține informații despre driverul de stocare și directorul rădăcină al dispozitivului de andocare.

Locația de stocare a imaginilor și containerelor Docker

Un container Docker este format din setări de rețea, volume și imagini. Locația fișierelor Docker depinde de sistemul de operare. Iată o prezentare generală pentru cele mai utilizate sisteme de operare:

  • Ubuntu: /var/lib/docker/
  • Fedora: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Windows: C:ProgramDataDockerDesktop
  • MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

În macOS și Windows, Docker rulează containere Linux într-un mediu virtual. Prin urmare, există câteva lucruri suplimentare de știut.

Docker pentru Mac

Docker nu este compatibil nativ cu macOS, deci Hyperkit este folosit pentru a rula o imagine virtuală. Datele sale de imagine virtuală se află în:

~/Library/Containers/com.docker.docker/Data/vms/0

În cadrul imaginii virtuale, calea este calea implicită Docker /var/lib/docker.

Puteți investiga directorul rădăcină Docker creând un shell în mediul virtual:

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Puteți ucide această sesiune apăsând Ctrl + a, urmat de apăsare k și y.

Docker pentru Windows

Pe Windows, Docker este puțin fracționat. Există containere Windows native care funcționează similar cu containerele Linux. Containerele Linux sunt rulate într-un mediu virtual minim bazat pe Hyper-V.

Configurația și imaginea virtuală pentru a executa imagini Linux sunt salvate în folderul rădăcină implicit Docker.

C:ProgramDataDockerDesktop

Dacă inspectați imagini regulate, veți obține căi Linux, cum ar fi:

$ docker inspect nginx

...
"UpperDir": "/var/lib/docker/overlay2/585...9eb/diff"
...

Vă puteți conecta la imaginea virtuală prin:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

Acolo, puteți merge la locația de referință:

$ cd /var/lib/docker/overlay2/585...9eb/
$ ls -lah

drwx------    4 root     root        4.0K Feb  6 06:56 .
drwx------   13 root     root        4.0K Feb  6 09:17 ..
drwxr-xr-x    3 root     root        4.0K Feb  6 06:56 diff
-rw-r--r--    1 root     root          26 Feb  6 06:56 link
-rw-r--r--    1 root     root          57 Feb  6 06:56 lower
drwx------    2 root     root        4.0K Feb  6 06:56 work

Structura internă a folderului rădăcină Docker

Interior /var/lib/docker, sunt stocate diferite informații. De exemplu, date pentru containere, volume, versiuni, rețele și clustere.

$ ls -la /var/lib/docker

total 152
drwx--x--x   15 root     root          4096 Feb  1 13:09 .
drwxr-xr-x   13 root     root          4096 Aug  1  2019 ..
drwx------    2 root     root          4096 May 20  2019 builder
drwx------    4 root     root          4096 May 20  2019 buildkit
drwx------    3 root     root          4096 May 20  2019 containerd
drwx------    2 root     root         12288 Feb  3 19:35 containers
drwx------    3 root     root          4096 May 20  2019 image
drwxr-x---    3 root     root          4096 May 20  2019 network
drwx------    6 root     root         77824 Feb  3 19:37 overlay2
drwx------    4 root     root          4096 May 20  2019 plugins
drwx------    2 root     root          4096 Feb  1 13:09 runtimes
drwx------    2 root     root          4096 May 20  2019 swarm
drwx------    2 root     root          4096 Feb  3 19:37 tmp
drwx------    2 root     root          4096 May 20  2019 trust
drwx------   15 root     root         12288 Feb  3 19:35 volumes

Imagini Docker

Cele mai grele conținuturi sunt de obicei imagini. Dacă utilizați driverul de stocare implicit overlay2, atunci imaginile Docker sunt stocate în /var/lib/docker/overlay2. Acolo, puteți găsi diferite fișiere care reprezintă straturi numai în citire ale unei imagini Docker și un strat deasupra acesteia care conține modificările dvs.

Să explorăm conținutul folosind un exemplu:

$ docker image pull nginx
$ docker image inspect nginx

[
    {
        "Id": "sha256:207...6e1",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:ad5...c6f"
        ],
        "Parent": "",
 ...
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 126698063,
        "VirtualSize": 126698063,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff:
                             /var/lib/docker/overlay2/585...9eb/diff",
                "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged",
                "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff",
                "WorkDir": "/var/lib/docker/overlay2/585...9eb/work"
            },
...

LowerDir conține straturile numai în citire ale unei imagini. Stratul de citire-scriere care reprezintă modificări face parte din UpperDir. În cazul meu, NGINX UpperDir folderul conține fișierele jurnal:

$ ls -la /var/lib/docker/overlay2/585...9eb/diff

total 8
drwxr-xr-x    2 root     root    4096 Feb  2 08:06 .
drwxr-xr-x    3 root     root    4096 Feb  2 08:06 ..
lrwxrwxrwx    1 root     root      11 Feb  2 08:06 access.log -> /dev/stdout
lrwxrwxrwx    1 root     root      11 Feb  2 08:06 error.log -> /dev/stderr

MergedDir reprezintă rezultatul UpperDir și LowerDir care este folosit de Docker pentru a rula containerul. WorkDir este un director intern pentru overlay2 și ar trebui să fie gol.

Volumele Docker

Este posibil să adăugați un magazin persistent la containere pentru a păstra datele mai mult decât există containerul sau pentru a partaja volumul cu gazda sau cu alte containere. Un container poate fi pornit cu un volum folosind -v opțiune:

$ docker run --name nginx_container -v /var/log nginx

Putem obține informații despre locația volumului conectat prin:

$ docker inspect nginx_container

...
"Mounts": [
            {
                "Type": "volume",
                "Name": "1e4...d9c",
                "Source": "/var/lib/docker/volumes/1e4...d9c/_data",
                "Destination": "/var/log",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
...

Directorul de referință conține fișiere din locație /var/log a containerului NGINX.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data

total 88
drwxr-xr-x    4 root     root        4.0K Feb  3 21:02 .
drwxr-xr-x    3 root     root        4.0K Feb  3 21:02 ..
drwxr-xr-x    2 root     root        4.0K Feb  3 21:02 apt
-rw-rw----    1 root     43             0 Jan 30 00:00 btmp
-rw-r--r--    1 root     root       34.7K Feb  2 08:06 dpkg.log
-rw-r--r--    1 root     root        3.2K Feb  2 08:06 faillog
-rw-rw-r--    1 root     43         29.1K Feb  2 08:06 lastlog
drwxr-xr-x    2 root     root        4.0K Feb  3 21:02 nginx
-rw-rw-r--    1 root     43             0 Jan 30 00:00 w

Curățați spațiul folosit de Docker

Se recomandă utilizarea comenzii Docker pentru a curăța containerele neutilizate. Containerul, rețelele, imaginile și memoria cache de construire pot fi curățate executând:

$ docker system prune -a

În plus, puteți elimina și volumele neutilizate executând:

$ docker volumes prune

rezumat

Docker este o parte importantă a mediilor și instrumentelor multor oameni. Uneori, Docker se simte un pic ca magia rezolvând problemele într-un mod foarte inteligent, fără a-i spune utilizatorului cum se fac lucrurile din culise. Cu toate acestea, Docker este un instrument obișnuit care își stochează piesele grele în locații care pot fi deschise și schimbate.

Uneori, stocarea se poate umple rapid. Prin urmare, este util să-i inspectați folderul rădăcină, dar nu este recomandat să ștergeți sau să modificați manual fișierele. În schimb, comenzile de prune pot fi folosite pentru a elibera spațiu pe disc.


Sper că ți-a plăcut articolul. Dacă îți place și simți nevoia unei aplauze, urmărește-mă pe Twitter.

Sunt cofondator al platformei noastre revoluționare de călătorie numită Exploreaza lumea. Suntem o tânără startup situată în Dresda, Germania și vom viza mai întâi piața germană. Contactați-mă dacă aveți feedback și întrebări despre orice subiect.

Happy Docker explorând 🙂


Referințe