Docker撰写:React App和Nginx之间共享的静态卷

时间:2019-12-12 09:51:33

标签: reactjs docker nginx docker-compose

我正在通过Nginx与docker服务一个React应用程序。我的docker-compose配置如下:

version: '3'
services:

  app:
    image: registry.gitlab.com/example/www:production
    volumes:
      - app:/var/www/app

  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - app
    volumes:
      - ./conf.d:/etc/nginx/conf.d
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
      - app:/var/www/app
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./certbot/renew.sh:/usr/local/bin/renew.sh
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    entrypoint: /bin/sh /usr/local/bin/renew.sh

volumes:
  app:

registry.gitlab.com/example/www:production的Dockerfile如下:

FROM node:latest

WORKDIR /app

# build
COPY package*.json ./
COPY src ./src
COPY public ./public
COPY .env* ./

RUN npm install

RUN npm run build

# remove build material
RUN rm -f package.json
RUN rm -f package-lock.json
RUN rm -rf src
RUN rm -rf public
RUN rm -f .env
RUN rm -f .env.local
RUN mv build/* .
RUN rm -rf build

CMD rm -rf /var/www/app/*; cp -r * /var/www/app/

我不想让我的容器运行任何守护进程或代理来“服务”我的react应用程序,而不是到处可见。唯一的目的就是构建和清理应用程序。

如您所见,我正在尝试在此容器和我的Nginx实例之间共享一个卷。它正在工作,但是在镜像时它没有更新。我想我的图像在运行时会与本地卷同步,并被旧版本的应用程序覆盖。

我尝试将CMD添加到我的映像中,以便在“运行时”将所有文件复制到装入的卷,但这没有任何区别。

实现此目标的最佳选择是什么?

我宁愿不要在图像中再次使用nginx,因为它会增加复杂性并增加计算能力。

谢谢您的帮助:)

0 个答案:

没有答案