Подтвердить что ты не робот

В чем разница между объемами и объемами?

Я видел шаблоны для создания докеров, но я в замешательстве. Каков наилучший способ создания готовых контейнеров. Когда следует использовать link или volumes_from. Когда следует использовать volumes_from, volumes

1 app-db-data​​h1 >

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 + data​​h1 >

app:
    image: someimage
    link:
        - db // data volume container name 
db:
    image: mysql
    volumes:
        - data // data file name

Приложение

1 app-service-data​​h1 >

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

Спасибо

4b9b3361

Ответ 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/...