У меня есть задача, которую я уже решил, но где я не удовлетворен решением. По сути, у меня есть контейнер веб-сервера (Nginx) и контейнер fast-CGI (PHP -FPM). Контейнер веб-сервера построен на готовом образе, контейнер FCGI основан на пользовательском образе и содержит файлы приложения. Теперь, поскольку не все является исходным кодом и обрабатывается в контейнере FCGI, мне нужно также сделать файлы приложения доступными внутри контейнера веб-сервера.
Вот docker-compose.yml
, который выполняет эту работу:
version: '3.3'
services:
nginx:
image: nginx:1-alpine
volumes:
- # customize just the Nginx configuration file
type: bind
source: ./nginx.conf
target: /etc/nginx/nginx.conf
- # mount application files from PHP-FPM container
type: volume
source: www-data
target: /var/www/my-service
read_only: true
volume:
nocopy: true
ports:
- "80:80"
depends_on:
- php-fpm
php-fpm:
image: my-service:latest
command: ["/usr/sbin/php-fpm7.3", "--nodaemonize", "--force-stderr"]
volumes:
- # create volume from application files
# This one populates the content of the volume.
type: volume
source: www-data
target: /var/www/my-service
volumes:
# volume with application files shared between nginx and php-fpm
www-data:
То, что мне здесь не нравится, в основном отражено в комментариях, касающихся томов. Кто создает и хранит данные, должно быть очевидно из кода, а не из комментариев. Кроме того, мне действительно не нравится, что docker фактически создает место, где хранятся данные для этого тома. Это не только использует дисковое пространство и увеличивает время запуска, но также требует, чтобы я никогда не забывал использовать docker-compose down --volumes
для обновления sh содержимого при следующем запуске. Вообразите мой гнев, когда я узнал, что down
не разрушил то, что сотворил up
, и что я охотился за призраками с предыдущих запусков.
Мои вопросы по этому поводу:
- Могу ли я express указать в коде, что один контейнер содержит данные, которые должны быть более доступными для других контейнеров? Приведенный выше код работает, но он совершенно не подходит для express намерения.
- Можно ли избежать создания чего-либо постоянного, чтобы избежать вышеупомянутых недостатков?
- Я хотел бы исследовать такие вещи, как тома tmpfs или другие параметры громкости. Моя проблема в том, что я не могу найти документацию для доступных драйверов томов или даже изучить, какие драйверы томов существуют. Может быть, я пропустил немного CLI для этого, я действительно был бы признателен за толчок в правильном направлении здесь.