Вот пример, который переместит ваш npm run generate
со времени сборки образа на время выполнения контейнера. Это минимальный пример, иллюстрирующий, как перемещение процесса во время выполнения делает том доступным как для работающего контейнера при запуске, так и для будущих во время выполнения.
со следующими значениями docker-compose.yml
:
version: '3'
services:
web:
image: ubuntu
volumes:
- site-assets:/app/dist
command: bash -c "echo initial > /app/dist/file"
restart: "no"
nginx:
image: ubuntu
volumes:
- site-assets:/app:ro
command: bash -c "while true; do cat /app/file; sleep 5; done"
volumes:
site-assets:
Мы можем запустить его с docker-compose up
в терминале. Наш сервер nginx
первоначально пропустит данные, но начальная служба web
запустит и сгенерирует наш актив (с содержанием initial
):
❯ docker-compose up
Creating network "multivol_default" with the default driver
Creating volume "multivol_site-assets" with default driver
Creating multivol_web_1 ... done
Creating multivol_nginx_1 ... done
Attaching to multivol_nginx_1, multivol_web_1
nginx_1 | cat: /app/file: No such file or directory
multivol_web_1 exited with code 0
nginx_1 | initial
nginx_1 | initial
nginx_1 | initial
nginx_1 | initial
В другом терминале мы можем обновить наш актив (ваш npm run generate
команда):
❯ docker-compose run web bash -c "echo updated > /app/dist/file"
И теперь мы можем видеть наш nginx
сервис, обслуживающий обновленное содержимое:
❯ docker-compose up
Creating network "multivol_default" with the default driver
Creating volume "multivol_site-assets" with default driver
Creating multivol_web_1 ... done
Creating multivol_nginx_1 ... done
Attaching to multivol_nginx_1, multivol_web_1
nginx_1 | cat: /app/file: No such file or directory
multivol_web_1 exited with code 0
nginx_1 | initial
nginx_1 | initial
nginx_1 | initial
nginx_1 | initial
nginx_1 | updated
nginx_1 | updated
nginx_1 | updated
nginx_1 | updated
^CGracefully stopping... (press Ctrl+C again to force)
Stopping multivol_nginx_1 ... done
Надеюсь, что это было полезно, чтобы проиллюстрировать способ получить преимущество объемного монтажа во время работы контейнера.