При запуске контейнер получает доступ на чтение ко всем слоям образа, а также создает свой исполняемый слой с возможностью создавать, обновлять и удалять файлы. Все эти изменения не будут видны для файловой системы хоста и других контейнеров, даже если они используют тот же базовый образ. При удалении контейнера все измененные данные также будут удалены. В большинстве случаев это предпочтительное поведение, однако иногда данные необходимо расшарить между несколькими контейнерами или просто сохранить.
Рассмотрим два способа хранения данных контейнеров:
- named volumes – именованные тома хранения данных
Позволяет сохранять данные в именованный том, который располагается в каталоге в
/var/lib/docker/volumes
и не удаляется при удалении контейнера. Том может быть подключен к нескольким контейнерам
# named volume
# Запуск контейнера jenkins с подключением каталога /var/jenkins_home как тома jenkins_home
docker run --detach \
--name jenkins --publish 80:8080 \
--volume=jenkins_home:/var/jenkins_home/ \
jenkins/jenkins:lts-jdk11
# Просмотр томов
docker volume ls
# Удаление неиспользуемых томов и очистка диска. Для удаления тома все контейнеры, в которых он подключен, должны быть остановлены и удалены
docker volume prune
- bind mount – монтирование каталога с хоста Позволяет монтировать файл или каталог с хоста в контейнер. На практике используется для проброса конфигурационных файлов или каталога БД внутрь контейнера
# bind mount
# Запуск контейнера node-exporter с монтированием каталогов внутрь контейнера в режиме read only: /proc хоста прокидывается в /host/proc:ro внутрь контейнера, /sys - в /host/sys:ro, а / - в /rootfs:ro
docker run \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--name node-exporter \
prom/node-exporter:v1.1.2
4.3.2 Dockerfile Theme | Back To iOSWiki Contents | 4.3.4 Network Driver