使用绑定挂载
使用绑定挂载,我们可以控制主机上具体的挂载点。我们可以用这个来持久化数据,但这一般是用来给容器提供其他数据。在处理应用时,我们可以使用绑定挂载来将源代码挂载到容器中,以使其查看代码更改,做出响应并让我们看到改变立即生效。
基于 Node 的应用中,nodemon 是一个极好的工具来查看文件变化并重启应用。其它的语言可能也有类似的工具。
两种挂载方式比较
| 命名挂载 | 绑定挂载 | |
|---|---|---|
| 主机位置 | Docker 决定 | 你来决定 |
| 挂载样例(使用 -v ) | my-volume:/usr/local/data | /path/to/data:/usr/local/data |
| 用容器内容来填充新挂载卷 | 是 | 否 |
| 支持挂载卷驱动 | 是 | 否 |
启动一个开发模式的容器
为了在开发工作流中运行我们的容器,我们要做以下这些事:
- 挂载我们的源代码到容器中
- 安装所有的依赖,包括“dev”依赖
- 启动 nodemon 来观察文件系统的变化
让我们来实践一下:
- 确保你没有
getting-started容器正在运行。 - 运行以下命令。我们将在之后具体解释:如果你在使用 PowerShell 请使用这个命令。
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"docker run -dp 3000:3000 `
-w /app -v "$(pwd):/app" `
node:12-alpine `
sh -c "yarn install && yarn run dev"-dp 3000:3000使用分派模式,并且创建端口映射-w /app设置工作目录(命令将要执行的位置)-v "$(pwd):/app"将当前目录与容器中的/app目录绑定node:12-alpine要用的镜像。注意这是 Dockerfile 中所用的基础镜像sh -c "yarn install && yarn run dev"使用sh启动 shell (alpine 没有bash)并执行yarn install来安装所有依赖,然后运行yarn run dev。如果我们查看package.json,我们会看到dev脚本启动了nodemon。
- 你可以用
docker logs -f <container-id>来查看日志。如果你看完了日志,可以用docker logs -f <container-id>
$ nodemon src/index.js
[nodemon] 1.19.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): *.*
[nodemon] starting `node src/index.js`
Using sqlite database at /etc/todos/todo.db
Listening on port 3000Ctrl+C退出。 - 现在,我们更改以下应用。在
src/static/js/app.js中,我们将 109 行中“Add Item”更改为“Add”。- {submitting ? 'Adding...' : 'Add Item'}
+ {submitting ? 'Adding...' : 'Add'} - 简单的刷新网页后,你能立即看到这个变化。
- 停止容器,然后用
docker build -t getting-started .构建一个新的镜像