В чем разница между объемами и объемами?
Я видел шаблоны для создания докеров, но я в замешательстве. Каков наилучший способ создания готовых контейнеров.
Когда следует использовать link
или volumes_from
.
Когда следует использовать volumes_from
, volumes
1 app-db-datah1 >
app:
image: someimage
link:
- db // data volume container name
db:
image: mysql
volumes_from:
- data // data volume name
data:
image: someimage
volumes:
- {host data}:{guest data}
2 app-db + datah1 >
app:
image: someimage
link:
- db // data volume container name
db:
image: mysql
volumes:
- data // data file name
Приложение
1 app-service-datah1 >
app:
image: someimage
volumes_from:
- service // service container name
service:
image: mysql
volumes_from:
- data // image container name
data:
image: someimage
volumes:
- {host data}:{guest data}
2 приложения-службы + данные
app:
image: someimage
volumes_from:
- service // service container name
service:
image: mysql
volumes:
- data // mounted file
Спасибо
Ответы
Ответ 1
Ссылка и volume_from - это разные понятия. Ссылки используются, когда вам необходимо подключить (по сети) два контейнера. В этом случае, если вы хотите подключить приложение к базе данных, способ сделать это - использовать ссылку, поскольку приложения используют порт и хост для подключения к базе данных (а не к каталогу в файловой системе).
Объемы и volume_from отличаются тем, что первый объявляет только тома, которые докеры будут делать постоянными или хост: гот монтирует, а volume_from сообщает докере использовать тома, которые уже объявлен на другом хосте (делает его доступным для этого хоста).
Из тех 4 случаев, которые вы представляете, я считаю, что первый и второй являются хорошим выбором. В первом вы создаете контейнер только для данных и делаете его контейнером mysql. Во втором случае данные и контейнер mysql совпадают.
Links и volumes прекрасно объясняются в документации докеров.
Надеюсь, что это поможет.
Ответ 2
Короче:
-
volumes_from
монтируется из других контейнеров.
-
volumes
монтируется.
-
links
соединяет контейнеры.
Немного больше объяснено:
-
volumes_from
монтирует тома из других контейнеров. Например, если у вас есть только контейнеры данных, и вы хотите монтировать эти данные только в контейнерах в контейнере с кодом приложения.
-
volumes
- это встроенный способ определения и монтирования томов. Если вы читаете # 17798, вы можете видеть, что именованные тома в большинстве случаев могут заменять только контейнеры данных.
Самое простое - использовать тома. Поскольку вы можете повторно использовать их, называя их.
-
links
отличается. Потому что он не монтируется. Вместо этого он соединяет контейнеры. Итак, если вы это сделаете:
app:
container_name: app_container
links:
- db
Это означает, что если вы подключитесь к app_container
с помощью docker exec -it app_container bash
и попробуйте ping db
, вы увидите, что контейнер может разрешить ip для db.
Это связано с тем, что docker создает network между контейнерами.
Ответ 3
Дополнение: Volumes_from используется, когда вы хотите установить все анонные тома контейнера. Названные тома могут быть установлены непосредственно с первых дней.
AFAICs https://docs.docker.com/compose/compose-file/#volumes. docker-compose полностью удалил эту функциональность, не уверен, как и почему, и если есть альтернатива. Но предположим, у вас есть контейнер приложения, и у вас есть контейнер httpd. Обычно вы определяете папку codebase,/var/www, в качестве тома anon, а затем монтируете ее в httpd для обслуживания статических файлов с помощью службы httpd, передавая все динамические файлы, такие как ruby /php/java, в backstream на приложение.
Точка использования тома анонов, а не именованного тома, заключается в том, что на самом деле вы хотите повторно развернуть приложение и изменить версию кода (обновление приложения), которая не будет работать, если приложение будет иметь именованный том. Тем не менее, анонные тома делают именно это, и именно поэтому здесь используется тома_from - использование именованных томов не является вариантом в этом случае (так как это очень практично во многих других случаях).
Для справки руководства по обновлению для volume_from:
https://docs.docker.com/compose/compose-file/compose-versioning/#upgrading
Таким образом, volume_from обычно используется в другом контексте/сценарии, а named-volume - это стандарт в других случаях, как описано выше. Краткое сообщение об этом fooobar.com/info/294255/...