Де зберігаються зображення 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

Якщо ви перевірите звичайні зображення, ви отримаєте такі шляхи Linux:

$ 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

Найважчим вмістом, як правило, є зображення. При використанні overlay2 драйвера зберігання по замовчуванням в, то ваші зображення 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 , який використовується для запуску Докер контейнера. 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 - це звичайний інструмент, який зберігає важкі деталі в місцях, які можна відкрити та змінити.

Іноді сховище може швидко заповнитись. Тому корисно перевірити його кореневу папку, але не рекомендується видаляти або змінювати будь-які файли вручну. Натомість команди prune можна використовувати для звільнення місця на диску.

Сподіваюся, вам сподобалась стаття. Якщо вам це подобається і ви відчуваєте потребу в оплесках, підпишіться на мене у Twitter.

Я є співзасновником нашої революційної платформи подорожей "Досліджуй світ". Ми молодий стартап, що знаходиться в Дрездені, Німеччина, і буде націлений на німецький ринок першим. Зверніться до мене, якщо у вас є відгуки та запитання щодо будь-якої теми.

Щасливий Докер вивчає :)

Список літератури

  • Документація сховища Docker

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

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

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