docker - 当我在本地开发时,我的 docker 实例可以更新吗?
问题描述
如果我使用 docker-compose 命令build
在本地运行我的应用程序,up
我会看到我的应用程序在端口上运行,http://localhost:3000
这很棒。但是,我对如何运行此设置、将其他软件包安装到容器等以继续开发有点困惑?也许我搞混了,但我认为如果有意义的话,我可以拥有这个独立的开发人员环境,而实际上不必在本地安装所有东西?我对 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 和其他语言也存在类似的模式。
推荐阅读
- c++ - 不使用 * 和 / 运算符将两个浮点数相乘和相除
- dev-null - 这个问题对社区来说并不有趣
- python - 如何使用 Python 打印非常大的 N%M 值?
- java - Java 8 获取不带最后一段的完整 URL 路径(带或不带斜杠)
- c++ - 即使在宏替换后也无法解析变量
- c++ - 如何不删除基类对象的副本?
- javascript - 在 javascript 中简单地获取 GET 请求到烧瓶服务器
- excel - 是否可以创建一个 Excel 宏来打开 Outlook 并搜索文本附件并打开特定的命名文件?
- php - 如何强制设置标题内容长度?
- reactjs - 在 componentDidMount 下更新反应中的对象