使用Docker容器进行开发/生产的最佳实践是什么。
假设我希望在开发过程中自动应用所做的更改,而无需重建和重新启动映像。据我了解,我可以在运行容器时为此注入体积。
docker run -v `pwd`/src:/src --rm -it username/node-web-app0
pwd/src
代表目录源代码。到目前为止,一切正常。
但是如何将代码交付生产?我认为将代码和二进制文件一起放入Docker容器更糟。我是否需要创建另一个将使用COPY的类似docker文件?或者最好像部署开发模式一样分别部署源代码并将其安装到docker。
答案 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