Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改源代码而不在Docker中重建图像?_Docker - Fatal编程技术网

如何更改源代码而不在Docker中重建图像?

如何更改源代码而不在Docker中重建图像?,docker,Docker,在dev/prod中使用Docker容器的最佳实践是什么 假设我希望在开发过程中自动应用更改,而无需重建和重新启动图像。据我所知,我可以在运行容器时为此注入卷 docker run -v `pwd`/src:/src --rm -it username/node-web-app0 其中pwd/src代表源代码目录。到目前为止,它运作良好 但是如何将代码交付到生产环境呢?我认为把代码和二进制文件放在docker容器中更糟糕。我是否需要创建另一个类似的docker文件,该文件将改用COPY?或者最

在dev/prod中使用Docker容器的最佳实践是什么

假设我希望在开发过程中自动应用更改,而无需重建和重新启动图像。据我所知,我可以在运行容器时为此注入卷

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中的构建块内添加目标参数: