На самом деле это не доктрина - не использовать привязные крепления.Да, они могут повредить файловую систему вашего хоста, если смонтированы неточно (например, -v /bin:/var/log
), как только у вас по умолчанию будут права root в контейнере;также они менее переносимы, но они облегчают обмен файлами между хостом и контейнером.Если вы хотите предоставить начальную конфигурацию для вашей службы или поместить исходный код для компиляции в контейнер, я полагаю, что вы предпочтете bind mount
вместо создания и запуска временного контейнера для операций docker volume cp
.Кроме того, вы всегда должны использовать опцию :ro
, когда это возможно (только для чтения), чтобы предотвратить изменение данных внутри контейнера.
Docker host - это машина (ПК), на которой работает демон Docker.
Это машина, на которой я создаю образ (вероятно, нет)?
Не соответствует действительности.Вы можете создавать, используя docker CLI
или docker API
удаленно.
Это машина, на которой будет запускаться образ?
Да, изображения запускаются демоном Docker.и, следовательно, это будет хост.
Если это так, что произойдет, если я запусту образ на нескольких машинах, создаст ли он два независимых тома?
Этозависит.Запускать образы на разных машинах можно по-разному, начиная с оркестраторов, таких как kubernetes
или docker swarm
, и заканчивая ручным запуском на отдельных демонах докера.С помощью оркестраторов можно иметь один и тот же том, общий для разных хостов, но в этом случае вы не можете использовать bind mounts
, вы используете volumes
.
Когда у меня есть разработка и производственная настройкаКак Docker управляет двумя отдельными томами для каждой среды?
Docker управляет не ты.
Кроме того, при использовании docker-compose при использовании томов данных кажется довольно легко потерять данные, это первое препятствие, которое заставляет меня колебаться в использовании томов данных, есть ли очевидное решение для смягченияпроблема?
Тома могут легко сохраняться между docker-compose
сессиями.Самый явный способ добиться этого - заранее объявить том с помощью
docker volume create foo
, а затем использовать его в ваших файлах композиции:
version: '3'
services:
abc:
volumes:
foo:/foo
volumes:
foo:
external: true