Docker的新手,所以也许我缺少明显的东西...
我有一个分为Web客户端和后端服务器的应用程序。后端很容易通过Dockerfile创建映像:
COPY
来源RUN
npm install
,npm run build
CMD
npm run start
已构建的后端应用程序将在运行时访问环境变量。
使用Web客户端并不是那么简单,因为webpack需要在构建应用程序之前 具有环境变量。据我所知,这只剩下两个选择:
container run
中运行npm run build
在CMD
上构建Web客户端当前我正在执行#2 ,但是这两个选项对我来说似乎都是错误的。最好的解决方案是什么?
FROM node:latest
COPY ./server /app/server
COPY ./web /app/web
WORKDIR /app/web
CMD ["sh", "-c", "npm install && npm run build && cd ../server && npm install && npm run build && npm run start"]
答案 0 :(得分:1)
首先,对于后端服务器和Web客户端来说,都有自己的Dockerfile / image是一个好主意。然后,使用docker-compose
之类的命令将它们一起运行很容易。
要向Web Dockerfile提供环境变量的方式是使用构建参数。在构建Docker映像时,可以使用Docker构建参数。您可以通过在Dockerfile中指定ARG
键,或将--build-arg
标志传递给docker build
来使用它们。
以下是根据您提供的内容为您的Web客户端提供的示例Dockerfile
:
FROM node:latest
ARG NODE_ENV=dev
COPY ./web /app/web
WORKDIR /app/web
RUN npm install \
&& npm run build
CMD ["npm", "run", "start"]
以下Dockerfile
使用ARG
指令创建一个默认值为dev
的变量。
运行NODE_ENV
时可以覆盖docker build
的值。
像这样:
docker build -t <myimage> --build-arg NODE_ENV=production .
无论是否覆盖它,NODE_ENV
都可以在构建Webpack之前使用。这样一来,您可以构建单个图像,然后将其分发给许多人,而无需构建Web客户端。
希望这对您有所帮助。