Как монтировать папки в Docker

docker mount catalog

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

Контейнеры Docker по своей природе неизменяемы. Это означает, что при перезапуске контейнера все данные, сохраненные в нем, сотрутся. Но сохранить эти данные можно. Для этого Docker предоставляет возможность подключения к контейнеру локальных директорий.

В этом руководстве мы рассмотрим два способа подключения и использования локальных папок в Docker. Знание обоих путей позволит вам более эффективно использовать контейнеры в разных ситуациях.

Как подключить локальную директорию при помощи docker run -v

Команда docker run сперва создает доступный для записи слой контейнера поверх указанного образа, а затем запускает его с использованием указанной команды (Источник — docker.com).

Параметр -v или —volume (англ. volume — «том») позволяет монтировать локальные директории и файлы к контейнеру. Например, вы можете запустить базу данных MySQL и примонтировать директорию для хранения в ней настоящих данных.

# запустить контейнер mysql в фоне

$ docker run --name mysql-db -v $(pwd)/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0.28-debian

# показать содержимое директории datadir

$ ls -la datadir

total 383848
-rw-r----- 1 sebarthel staff 196608 Mar 26 22:47 #ib_16384_0.dbl
wr-rw-r----- 1 sebarthel staff 8585216 Mar 26 22:47 #ib_16384_1.dbl
wrdrwxr-x--- 12 sebarthel staff 384 Mar 26 22:47 #innodb_temp
drwxr-xr-x@ 27 sebarthel staff 864 Mar 26 22:47.
drwxr-xr-x 3 sebarthel staff 96 Mar 26 22:47..
-rw-r----- 1 sebarthel staff 56 Mar 26 22:47 auto.cnf
-rw-r----- 1 sebarthel staff 913 Mar 26 22:47 binlog.000001
(more directories)


# остановить контейнер mysql
docker rm -f mysql-db

Подключение директории означает двустороннюю синхронизацию. Любой файл, измененный на хосте, изменится и в контейнере, а любой файл, измененный в контейнере, изменится и на хосте. Таким образом, если вы остановите и заново запустите базу данных, вы сможете примонтировать ту же директорию, и вам будут доступны ваши настройки и сохраненные данные.

Преимущество этого метода в том, что он прост и легок в использовании. Монтируйте локальные директории при помощи docker run -v тогда, когда планируете просматривать и изменять файлы на хосте. Например, это подходит для файлов конфигурации и логов.

Как сохранять изменения при помощи томов Docker

Для сохранения изменений можно монтировать не локальную директорию, а том Docker.

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

Давайте создадим том Docker и подключим его для сохранения данных MySQL.

# создать том (volume)

docker volume create mysql-data

# запустить контейнер mysql в фоне

$ docker run --name mysql-db -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

# остановить контейнер mysqldocker rm -f mysql-db
# удалить том

docker volume remove mysql-data

Перед удалением тома Docker вы можете открыть ваш Docker GUI и просмотреть том, кликнув на вкладку data.

Вы видите эти файлы, но они изолированы в томе Docker.

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

Итоги

Контейнеры Docker становятся куда более полезными, если вы умеете сохранять ваши данные и не теряете их при остановке контейнера.

Вы можете привязывать локальные директории и тома к контейнеру при помощи параметра -v для команды docker run. При этом вам придется указать абсолютный путь к локальной папке или имя тома и примонтировать их к директории внутри контейнера -v <source>:<target>.

От редакции Techrocks. Если вам интересна эта тема, можем порекомендовать хорошее видео. В нем разбирается подключение директории с помощью флага -v (как в этой статье), а также с помощью флага —mount.

Перевод статьи «Docker Mount Volume – How To Mount a Local Directory».

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!