Как подключить каталог хоста к контейнеру Docker — CloudSavvy IT

Docker предоставляет инструменты для объединения файловых систем контейнеров и операционной системы хоста, на которой запущен контейнер, например, привязки монтирования и томов. Они могут быть очень полезны как в среде разработки, так и в производственной среде.

Зачем монтировать с хоста?

Как правило, с Docker вы хотите, чтобы образы запускались независимо от хост-системы. Если вы хотите, например, обновить код приложения или файлы конфигурации, вы, вероятно, захотите создать новую версию контейнера и повторно развернуть. Это позволяет быстро масштабировать и перемещать изображения, не беспокоясь об оборудовании, на котором они работают.

Однако в среде разработки возможность напрямую смонтировать каталог, чтобы включить горячую перезагрузку конфигурации или кода, может быть очень полезной. Например, вы можете работать над JS-файлом или надстройкой PHP, которые можно просто перетащить в контейнер. Или вы можете смонтировать весь каталог конфигурации NGINX для работы на своем веб-сайте. Каким бы ни был ваш случай использования, монтирование файлов — неплохое решение.

Это также полезно в производстве, если у вас есть службы хоста, которые зависят от файлов в контейнерах. Например, у вас может быть служба приема и агрегирования журналов, которая предпочла бы, чтобы файлы журналов контейнера находились в каталоге, доступном с хоста. Хотя, вероятно, есть несколько чистых решений в Docker для ваших проблем, иногда проще просто смонтировать том.

Совместимость с macOS

Примечание: поскольку монтирование выполняется через Docker API, они будут работать независимо от ОС хоста. Однако macOS имеет дополнительную защиту и монтируется за пределами нескольких каталогов хоста. может дать сбой с «монтированием отказано» во время выполнения. Сюда входит / Users, который охватывает большинство операций, но при необходимости вы можете исправьте это в настройках Docker в разделе «Настройки»> «Ресурсы»> «Общий доступ к файлам». добавив целевой каталог в список.

Монтирование каталога хоста

Создать привязку довольно просто. Добавьте его с флагом —mount type = bind при запуске, указав исходный и целевой каталог для монтирования.

docker run -d -it —name container —mount type = bind, source = / nginxconfig, target = / etc / nginx nginx: latest

Bind mounts — самые простые, но Docker предоставляет Volume API для более удобного управления этими видами монтирования. Сохраненные данные будут управляться Docker, а каталог тома будет автоматически создан в каталоге Docker. Это может быть не то, что вам нужно, если вы имеете в виду существующий каталог, но этот метод лучше, поскольку он не зависит от файловой структуры хост-ОС.

том docker создать nginx-config docker run -d —name devtest —mount source = nginx-config, target = / etc / nginx nginx: latest

Вы также можете использовать Docker Compose для определения томов:

версия: «3.0» службы: web: изображение: nginx: последние порты: — тома «80:80»: — nginx-config: / etc / nginx / volume: nginx-config:

Они хранятся в стандартном формате, доступном для Linux:

/ вар / библиотека / докер / тома / volumeID / _data

Однако в macOS вам потребуется подключиться к виртуальной машине Docker, чтобы иметь возможность просматривать тома.

Монтирование отдельных файлов

Монтирование целых каталогов хорошо работает, когда вы хотите отредактировать множество файлов конфигурации / кода, которые хранятся на хосте. Однако иногда вы можете просто смонтировать один файл для редактирования, не касаясь других файлов.

Для этого вы можете запустить контейнер с привязкой монтирования, которая поддерживает отдельные файлы, если вы укажете путь:

docker run -it —mount type = bind, source = / path / file.cfg, target = / etc / example / file.cfg nginx sh

Если у вас есть много файлов для монтирования таким образом, вы можете поместить их все в один каталог хоста и смонтировать этот каталог в другое место в контейнере. Затем вы можете использовать символические ссылки внутри контейнера, чтобы связать файлы в смонтированном каталоге в нужное место.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *