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

Контейнеры облегчают жизнь разработчика и повышают эффективность его работы. При этом одно из самых популярных решений контейнеризации — 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.dblwr
-rw-r-----    1 sebarthel  staff   8585216 Mar 26 22:47 #ib_16384_1.dblwr
drwxr-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

# остановить контейнер mysql
docker 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».

[customscript]techrocks_custom_after_post_html[/customscript]

[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

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

Прокрутить вверх