Укажите источник данных для общего тома - PullRequest
0 голосов
/ 01 мая 2020

У меня есть задача, которую я уже решил, но где я не удовлетворен решением. По сути, у меня есть контейнер веб-сервера (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 для этого, я действительно был бы признателен за толчок в правильном направлении здесь.
...