Reactjs Docker compose:react应用程序和nginx之间的共享静态卷
我正在通过nginx和docker提供react应用程序。我的docker compose配置如下所示:Reactjs Docker compose:react应用程序和nginx之间的共享静态卷,reactjs,docker,nginx,docker-compose,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:
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:
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/
registry.gitlab.com/example/www:production的Dockerfile如下所示:
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:
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/
我不想让我的容器运行任何deamon或代理来“服务”我的react应用程序,而不是随处可见的内容。它的唯一目的是构建和清理应用程序
如您所见,我正在尝试在这个容器和我的nginx实例之间共享一个卷。它正在工作,但在图像更新时不会更新。我猜当我的图像运行时,它会与本地卷同步,并被我的应用程序的旧版本覆盖
我试图在映像中添加一个CMD,以便在“运行时”将所有文件复制到已装入的卷中,但没有任何区别
实现这一目标的最佳选择是什么
我不希望在我的图像中再次使用nginx,因为它会增加复杂性,从而提高计算能力
谢谢你的帮助:)