Docker中的临时共享卷

时间:2018-08-27 16:13:35

标签: docker docker-compose

我正在寻找一种方法,可以在一个Docker容器中与另一个共享一个任意目录,但又不能在容器创建之间持久化卷。

用例是在Web应用程序和Web服务器(如Nginx)之间共享静态资产。两个容器均由图像构建。构建Web应用程序的Dockerfile时,会将静态资产复制到/var/www/public之类的目录中。我想避免持久化卷,因为在构建Web应用程序时会更新静态资产。

我已经尝试过使用类似于以下内容的docker-compose.yml进行此操作,但不幸的是,这样可以保留该卷,并且当使用新映像重新创建容器时,共享卷的内容不会更新。 / p>

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:

Web应用程序的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挂载,但是看来它们无法在容器之间共享。

1 个答案:

答案 0 :(得分:0)

如果您希望在Docker / Compose环境中执行此操作,我可能只使用磁盘上的文件夹,并在启动容器时对其进行配置。另一种选择是让构建管道使用docker cp将文件从一个映像复制到另一个映像,再复制到构建环境,并在后续的Dockerfile中复制COPY(假设它们是静态文件)。

如果您希望在Kubernetes中进行此操作,则可以使用emptyDir卷和具有多个容器(边车)的吊舱来实现。