如何在 Dockerfile 中针对不同的构建环境 运行 不同的 ENTRYPOINT 命令?
How to run different ENTRYPOINT commands in Dockerfile for different build environments?
现在我有一个 Dockerfile
:
FROM node:12-slim
WORKDIR /
COPY ./package.json ./package.json
COPY ./dist ./dist
RUN npm install
ENTRYPOINT npm start
# ENTRYPOINT npm run dev
你看我有 2 个选项 ENTRYPOINT
。当我开发时,我需要它 运行 npm run dev
。当我部署它时,我需要它 运行 npm start
.
如何在保留单个 Dockerfile
文件的同时执行此操作?
有没有办法传递某种构建参数/ENV 变量?人们通常如何处理这种情况?
我是这样运行的:
docker run hello-world:latest
如果您将 ENTRYPOINT
更改为 CMD
,您可以在 docker run
命令行轻松覆盖它:
# No ENTRYPOINT
CMD npm start
# The command after the image name overrides CMD
docker run hello-world:latest npm run dev
(有一个 docker run --entrypoint
选项,但它的语法最终很尴尬。)
How do people usually handle this?
我在 Docker 之外尽我所能进行开发。我很少 运行 解决对确切解释器版本敏感的问题,而且主机环境通常也没有什么区别。对于在 Docker 中唯一发生的事情是应用程序构建的前端应用程序来说,这是双重的;所有 运行 时间和 I/O 都发生在最终用户的浏览器中。
# Without Docker
npm run dev
npm run test
npm run lint
# Ship it
docker build -t my/image .
docker run -p 3000:3000 my/image
如果可能,运行 在测试和生产环境中使用相同的图像。请勿使用绑定挂载或其他卷挂载覆盖映像中的代码。
现在我有一个 Dockerfile
:
FROM node:12-slim
WORKDIR /
COPY ./package.json ./package.json
COPY ./dist ./dist
RUN npm install
ENTRYPOINT npm start
# ENTRYPOINT npm run dev
你看我有 2 个选项 ENTRYPOINT
。当我开发时,我需要它 运行 npm run dev
。当我部署它时,我需要它 运行 npm start
.
如何在保留单个 Dockerfile
文件的同时执行此操作?
有没有办法传递某种构建参数/ENV 变量?人们通常如何处理这种情况?
我是这样运行的:
docker run hello-world:latest
如果您将 ENTRYPOINT
更改为 CMD
,您可以在 docker run
命令行轻松覆盖它:
# No ENTRYPOINT
CMD npm start
# The command after the image name overrides CMD
docker run hello-world:latest npm run dev
(有一个 docker run --entrypoint
选项,但它的语法最终很尴尬。)
How do people usually handle this?
我在 Docker 之外尽我所能进行开发。我很少 运行 解决对确切解释器版本敏感的问题,而且主机环境通常也没有什么区别。对于在 Docker 中唯一发生的事情是应用程序构建的前端应用程序来说,这是双重的;所有 运行 时间和 I/O 都发生在最终用户的浏览器中。
# Without Docker
npm run dev
npm run test
npm run lint
# Ship it
docker build -t my/image .
docker run -p 3000:3000 my/image
如果可能,运行 在测试和生产环境中使用相同的图像。请勿使用绑定挂载或其他卷挂载覆盖映像中的代码。