如何更改源代码而不在Docker中重建图像?
在dev/prod中使用Docker容器的最佳实践是什么 假设我希望在开发过程中自动应用更改,而无需重建和重新启动图像。据我所知,我可以在运行容器时为此注入卷如何更改源代码而不在Docker中重建图像?,docker,Docker,在dev/prod中使用Docker容器的最佳实践是什么 假设我希望在开发过程中自动应用更改,而无需重建和重新启动图像。据我所知,我可以在运行容器时为此注入卷 docker run -v `pwd`/src:/src --rm -it username/node-web-app0 其中pwd/src代表源代码目录。到目前为止,它运作良好 但是如何将代码交付到生产环境呢?我认为把代码和二进制文件放在docker容器中更糟糕。我是否需要创建另一个类似的docker文件,该文件将改用COPY?或者最
docker run -v `pwd`/src:/src --rm -it username/node-web-app0
其中pwd/src
代表源代码目录。到目前为止,它运作良好
但是如何将代码交付到生产环境呢?我认为把代码和二进制文件放在docker容器中更糟糕。我是否需要创建另一个类似的docker文件,该文件将改用COPY?或者最好像开发模式那样单独部署源代码并将其装载到docker。最佳实践是为每个版本的代码构建新的docker映像。这在生产环境中具有许多优势,如更快的部署、独立于其他系统、更容易回滚、可导出性等 可以在同一Dockerfile中使用 以下是NodeJS应用程序的简单示例:
FROM node:10 as dev
WORKDIR /src
CMD ["myapp.js"]
FROM node:10
COPY package.json .
RUN npm install
COPY . .
请注意,此Dockerfile仅用于演示目的,可以通过多种方式对其进行改进
在开发环境中工作时,请使用以下命令构建基本映像,并使用已装入的文件夹运行代码:
docker build --target dev -t username/node-web-app0 .
docker run -v `pwd`/src:/src --rm -it username/node-web-app0
当您准备好进行生产时,只需运行exec docker而不使用--target
参数来构建完整映像,其中包含以下代码:
docker build -t username/node-web-app0:v0.1 .
docker push username/node-web-app0:v0.1
我只是在这里表达一个想法,我从来没有测试过这个,但如果将符号链接用作卷,这难道不可能吗。您使用第二个Docker在新文件夹中构建应用程序,然后替换当前安装在容器中的符号链接?看起来很不错。因此,您有一个针对dev/prod的Dockerfile。是否有针对不同目标的dev/prod的不同compose文件?是的,在docker-compose.yaml中的构建块内添加目标参数: