Docker compose как монтировать путь из одного контейнера в другой?
Я nignx container
и asset container
которые имеют все мои активы, построенные из grunt или некоторых других инструментов.
теперь в docker compose file я хочу смонтировать 's путь в nginx container
таким образом, nginx может обслуживать эти файлы.
как мы можем это сделать? я не помню, но я думаю, что есть вариант, когда мы можем разделить путь одного контейнера с другим.
предположим, если я масштабирую nginx до 2 контейнера, то будет ли это крепление работать для всех экземпляров nginx?
если я увеличиваю
asset container
что тогда будет?Я также хочу установить это с моим хостом, чтобы развитие можно было сделать легко.
1 ответов
то, что вы хотите сделать, это использовать том, а затем смонтировать этот том в любые контейнеры, в которых вы хотите, чтобы он появился.
полностью в Docker
вы можете сделать это полностью внутри Docker.
вот пример (урезанная - ваш реальный файл будет иметь гораздо больше, чем это в нем, конечно).
version: '3'
services:
nginx:
volumes:
- asset-volume:/var/lib/assets
asset:
volumes:
- asset-volume:/var/lib/assets
volumes:
asset-volume:
внизу находится один определенный том, названный "asset-volume".
затем в каждой из ваших услуг, вы скажите Docker для монтирования этого тома по определенному пути. Я показываю примеры путей внутри контейнера, просто настройте их так, чтобы они были тем путем, который вы хотите, чтобы они были в контейнере.
том является независимой сущностью, не принадлежащей какому-либо конкретному контейнеру. Он просто вмонтирован в каждый из них и является общим. Если один контейнер изменяет содержимое, то все они видят изменения.
обратите внимание, что если вы предпочитаете только один может внести изменения, вы всегда можете смонтировать том только для чтения в некоторые услуги, добавив :ro
до конца строки объем.
services:
servicename:
volumes:
- asset-volume:/var/lib/assets:ro
использование каталога хоста
поочередно вы можете использовать каталог на хосте и монтировать его в контейнеры. Это имеет то преимущество, что вы можете работать непосредственно с файлами, используя свои инструменты за пределами Docker (например, текстовый редактор GUI и другие инструменты).
это то же самое, за исключением того, что вы не определяете том в Docker, вместо установки внешнего справочник.
version: '3'
services:
nginx:
volumes:
- ./assets:/var/lib/assets
asset:
volumes:
- ./assets:/var/lib/assets
в этом примере локальный каталог "assets" монтируется в оба контейнера с помощью относительного пути ./assets
.
использование как в зависимости от окружающей среды
вы также можете настроить его для другой dev и производственной среды. Положите все в docker-compose.в формате YML за исключением объем крепления. Затем сделайте еще два файлы.
- докер-сочинять.разработка.в формате YML
- докер-сочинять.подгонять.в формате YML
в этих файлах ставится только минимальная конфигурация для определения монтирования Тома. Мы смешаем это с композицией докера.yml для получения окончательной конфигурации.
тогда используйте это. Он будет использовать конфигурацию из docker-compose.yml и использовать что-либо во втором файле в качестве переопределения или дополнительной конфигурации.
docker-compose -f docker-compose.yml \
-f docker-compose.dev.yml \
up -d
и для производства просто используйте файл prod вместо файла dev.
идея здесь состоит в том, чтобы сохранить большую часть конфигурации в docker-compose.yml, и только минимальный набор различий в альтернативных файлах.
пример:
docker-compose.подгонять.в формате YML
version: '3'
services:
nginx:
volumes:
- asset-volume:/var/lib/assets
docker-compose.разработка.в формате YML
version: '3'
services:
nginx:
volumes:
- ./assets:/var/lib/assets