【发布时间】:2018-10-23 07:24:02
【问题描述】:
我是 docker 新手,我已经在网上完成了他们的教程和其他一些事情,但仅此而已..所以我想我这样做的方式非常错误..
自从我在寻找一种发布 Dockerfile 的方法以来已经有一天了,该方法将启动 npm run dev 或 npm start,这取决于产品或开发环境。
游乐场
到目前为止我得到了什么:
# Specify the node base image version such as node:<version>
FROM node:10
# Define environment variable, can be overight by runinng docker run with -e "NODE_ENV=prod"
ENV NODE_ENV dev
# Set the working directory to /usr/src/app
WORKDIR /usr/src/app
# Install nodemon for hot reload
RUN npm install -g nodemon
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install && \
npm cache clean --force
# Set the port used by the app
EXPOSE 8080
# Bundle app source
COPY . .
# Launch the app
CMD [ "nodemon", "server.js" ]
从我在 www 中看到的情况来看,人们倾向于使用 bash 来执行此类操作或在 docker-compose 中挂载一个卷,但是对于仅在内部执行 if else 条件而言,它看起来非常冗长一个 Dockerfile。
目标
不使用任何其他文件(保持简单)
我正在寻找的是类似的东西:
if [ "$NODE_ENV" = "dev" ]; then
CMD ["nodemon", "server.js"] // dev env
else
CMD ["node", "server.js"] // prod env
fi
也许我错了,任何关于如何在 docker 中做这样的事情的好建议都会很好。
另外,请注意,在我的主机中修改文件时,我不确定如何允许在容器中重新加载,我猜这完全与音量有关,但又不知道该怎么做..
【问题讨论】:
标签: javascript node.js docker docker-compose dockerfile