Эфемерный общий объем в докере - PullRequest
0 голосов
/ 27 августа 2018

Я ищу способ совместного использования произвольного каталога в одном контейнере Docker с другим, но без сохранения томов между созданиями контейнеров.

Вариант использования - совместное использование статических ресурсов между веб-приложением и веб-сервером, таким как nginx. Оба контейнера построены по изображению. Dockerfile веб-приложения копирует статические ресурсы в каталог, подобный /var/www/public, при его создании. Я хочу избежать сохранения тома, поскольку статические ресурсы обновляются при сборке веб-приложения.

Я попытался сделать это с docker-compose.yml, который выглядит следующим образом, но, к сожалению, этот том сохраняется, и при повторном создании контейнера с новым изображением содержимое общего тома не обновляется.

version: '3.5'

services:
  web:
    image: bswinnerton/nyc-restaurant-grades
    networks:
      - backend
    volumes:
      - www_data:/var/www/app/
  nginx:
    image: nginx
    depends_on:
      - web
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - www_data:/var/www/app/
    networks:
      - backend

volumes:
  www_data:

networks:
  backend:

И веб-приложение Dockerfile выглядит примерно так:

FROM ruby:2.5.1

# Install dependencies
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

# Set working directory, where the commands will be ran:
RUN mkdir -p /var/www/app
WORKDIR /var/www/app

# Adding gems
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --jobs 20 --retry 5

# Adding project files
COPY . .

# Precompile assets
RUN bundle exec rails assets:precompile

CMD [ "bundle", "exec", "puma", "-C", "config/puma.rb" ]

Я подумал об использовании tmpfs mount, но, похоже, они не могут быть разделены между контейнерами.

1 Ответ

0 голосов
/ 09 марта 2019

Если вы хотите сделать это в среде Docker / Compose, я бы, вероятно, просто использовал папку на диске и настроил ее при запуске контейнеров. Другая альтернатива состоит в том, чтобы ваш конвейер сборки копировал файлы из одного изображения в другое, используя docker cp в среду сборки и COPY в последующем Dockerfile (при условии, что они являются статическими файлами).

Если вы хотите сделать это в Kubernetes, этого можно достичь с помощью томов emptyDir и контейнеров с несколькими контейнерами (колясками).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...