使用绑定挂载
使用绑定挂载,我们可以控制主机上具体的挂载点。我们可以用这个来持久化数据,但这一般是用来给容器提供其他数据。在处理应用时,我们可以使用绑定挂载来将源代码挂载到容器中,以使其查看代码更改,做出响应并让我们看到改变立即生效。
基于 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 .
构建一个新的镜像