如何在不重建Docker镜像的情况下更改源代码?

时间:2018-10-07 14:41:59

标签: docker

使用Docker容器进行开发/生产的最佳实践是什么。

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

docker run -v `pwd`/src:/src --rm -it username/node-web-app0

pwd/src代表目录源代码。到目前为止,一切正常。

但是如何将代码交付生产?我认为将代码和二进制文件一起放入Docker容器更糟。我是否需要创建另一个将使用COPY的类似docker文件?或者最好像部署开发模式一样分别部署源代码并将其安装到docker。

1 个答案:

答案 0 :(得分:2)

最佳做法是为每个版本的代码构建一个新的docker映像。在生产环境中具有许多优势,例如部署速度更快,与其他系统的独立性,更容易的回滚,可导出性等。

可以使用multi-stage builds在同一个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

当您准备好进行生产时,只需执行docker docker run而无需使用--target参数来构建完整映像,该映像包含以下代码:

docker build -t username/node-web-app0:v0.1 .
docker push username/node-web-app0:v0.1