我正在通过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,因为它会增加复杂性并增加计算能力。
谢谢您的帮助:)