Къде се съхраняват изображенията на Docker? Обяснени пътища на контейнера на Docker

Docker е широко приет и се използва за стартиране и мащабиране на приложения в производството. Освен това може да се използва за бързо стартиране на приложения чрез изпълнение на една команда на Docker.

Компаниите също инвестират все повече усилия за подобряване на развитието на локални и отдалечени контейнери на Docker, което също има много предимства.

Можете да получите основната информация за вашата конфигурация на Docker, като изпълните:

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

Резултатът съдържа информация за вашия драйвер за съхранение и коренната директория на докера.

Мястото за съхранение на изображения и контейнери на Docker

Контейнерът на Docker се състои от мрежови настройки, обеми и изображения. Местоположението на файловете на Docker зависи от вашата операционна система. Ето преглед на най-използваните операционни системи:

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

В macOS и Windows Docker изпълнява Linux контейнери във виртуална среда. Следователно има някои допълнителни неща, които трябва да знаете.

Docker за Mac

Docker не е съвместим с macOS, така че Hyperkit се използва за стартиране на виртуално изображение. Неговите данни за виртуални изображения се намират в:  

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

В рамките на виртуалното изображение пътят е пътят по подразбиране на Docker /var/lib/docker.

Можете да проучите основната си директория на Docker, като създадете черупка във виртуалната среда:

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

Можете да убиете тази сесия, като натиснете Ctrl + a , последвано от натискане на k и y .

Docker за Windows

В Windows Docker е малко разделен. Има собствени Windows контейнери, които работят подобно на Linux контейнери. Контейнерите на Linux се изпълняват в минимална базирана на Hyper-V виртуална среда.

Конфигурацията и виртуалното изображение за изпълнение на linux изображения се записват в основната папка на Docker по подразбиране.

C:\ProgramData\DockerDesktop

Ако проверите редовни изображения, ще получите линукс пътеки като:

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

Можете да се свържете с виртуалното изображение чрез:

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

Там можете да отидете на посоченото място:

$ 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

Вътрешната структура на основната папка на Docker

Вътре /var/lib/dockerсе съхранява различна информация. Например данни за контейнери, томове, компилации, мрежи и клъстери.

$ 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 

Docker изображения

Най-тежкото съдържание обикновено са изображения. Ако използвате стандартното наслагване на драйвер за съхранение2, тогава вашите Docker изображения се съхраняват в /var/lib/docker/overlay2. Там можете да намерите различни файлове, които представляват слоеве само за четене на изображение на Docker и слой върху него, който съдържа вашите промени.

Нека изследваме съдържанието, като използваме пример:

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "[email protected]: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 съдържа само за четене слоеве на изображението. Слоят за четене и запис, който представлява промени, е част от UpperDir . В моя случай папката NGINX UpperDir съдържа регистрационните файлове:

$ 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 представлява резултатът от UpperDir и LowerDir който се използва от Docker да тече контейнера. В WorkDir е вътрешна директория за overlay2 и трябва да е празен.

Обеми на Docker

Възможно е да добавите постоянно хранилище към контейнери, за да съхранявате данни по-дълго, отколкото съществува контейнерът, или да споделяте тома с хоста или с други контейнери. Контейнер може да се стартира с том чрез опцията -v :

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

Можем да получим информация за местоположението на свързания том, като:

$ 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": "" } ], ... 

Реферираната директория съдържа файлове от местоположението /var/logна контейнера 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 

Почистете пространството, използвано от Docker

Препоръчително е да използвате командата Docker за почистване на неизползвани контейнери. Контейнерът, мрежите, изображенията и кешът на компилацията могат да бъдат почистени чрез изпълнение:

$ docker system prune -a

Освен това можете също така да премахнете неизползваните томове, като изпълните:

$ docker volumes prune

Обобщение

Docker е важна част от средата и инструментите на много хора. Понякога Docker се чувства малко като магия, като решава проблеми по много интелигентен начин, без да казва на потребителя как се правят нещата зад кулисите. И все пак Docker е обикновен инструмент, който съхранява тежките си части на места, които могат да се отварят и променят.

Понякога съхранението може да се запълни бързо. Следователно е полезно да проверите коренната му папка, но не се препоръчва ръчно да изтривате или променяте файлове. Вместо това командите за изрязване могат да се използват за освобождаване на дисково пространство.

Надявам се статията да ви е харесала. Ако ви харесва и чувствате нужда от бурни аплодисменти, последвайте ме в Twitter.

Съосновател съм на нашата революционна платформа за пътуване, наречена „Изследвай света“. Ние сме млад стартъп, разположен в Дрезден, Германия и ще се насочим първо към германския пазар. Обърнете се към мен, ако имате обратна връзка и въпроси по която и да е тема.

Честит Докер проучване :)

Препратки

  • Докер документация за съхранение на Docker

    //docs.docker.com/storage/storagedriver/

  • Файлова система за наслагване на документация

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt