首页 > 解决方案 > 当我在本地开发时,我的 docker 实例可以更新吗?

问题描述

如果我使用 docker-compose 命令build在本地运行我的应用程序,up我会看到我的应用程序在端口上运行,http://localhost:3000这很棒。但是,我对如何运行此设置、将其他软件包安装到容器等以继续开发有点困惑?也许我搞混了,但我认为如果有意义的话,我可以拥有这个独立的开发人员环境,而实际上不必在本地安装所有东西?我对 docker 的有限理解是它消除了各种机器设置的要求?

我想我想知道当有代码更改或我需要安装新的依赖项时,是否有办法让我正在运行的 docker 容器刷新/重新加载?

标签: docker

解决方案


您要求的内容相当简单,但您没有告诉我们您使用的是什么语言,所以给您一个您会发现有用的工作示例非常困难。您需要做的是创建一个容器,该容器可以mount在您运行程序时执行您的程序但您的源/bin 目录,以便它可以看到您的源/二进制文件,然后您需要一个可以对代码更改做出反应的开发工具版本.

例如,对于 node.js,假设您package.json的项目根目录和源代码/src位于根目录下,可以通过以下方式完成:

Dockerfile

FROM node:current-buster-slim
RUN npm install -g nodemon
ENTRYPOINT ["nodemon"]
CMD ["/app/src/index.js"]

将该文件放入您的项目中(可能在名为 的目录中docker)。这是一组基于 docker-hub 上的 nodejs 镜像构建 docker 镜像的指令。它安装nodemon了一个用于 node.js 的热重载实用程序,并指示图像使用它。然后它将自己配置为index.js/app/src/目录中运行。假设这是您将调用应用程序的入口点,但可以轻松更改它。

然后,您可以在 bash shell 中进入目录并发出命令:

docker build --tag node-dev .

node-dev您正在创建的图像的名称在哪里。然后,在项目的根目录中,您可以执行以下操作:

docker run -it --rm -v $PWD:/app node-dev

这将基于先前构建的node-dev映像创建并启动一个容器,该容器附加到终端,一旦完成执行,它将自行删除。它将当前工作目录(本例中的项目根目录)挂载到容器中名为/app.

在第一次运行之前,您仍然需要运行npm install,以确保您的 node_modules 目录中有正确的模块,但从那里开始,nodemon应用程序将监视您的源代码的更改并在它发生时重新启动您的应用程序。

类似的模式也适用于 java,但热重载有点困难。python 和其他语言也存在类似的模式。


推荐阅读