开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
大家好,我是阿萨。前几天学习了命名卷来持久化数据库中的数据,保证启动容器后数据不丢失。
如果我们只想存储数据,命名卷是很好的选择,因为我们不必担心数据存储在哪里。
通过绑定挂载,我们可以控制主机上的确切挂载点。我们可以使用它来持久化数据,但它通常用于向容器提供额外的数据。在处理应用程序时,我们可以使用绑定挂载将源代码挂载到容器中,让它看到代码更改、作出响应,并让我们立即看到更改。
对于基于节点的应用程序,nodemon是一个很好的工具,可以监视文件更改,然后重新启动应用程序。在大多数其他语言和框架中都有等价的工具。
一,卷类型比较
绑定挂载和命名卷是Docker引擎附带的两种主要卷类型。但是,可以使用其他卷驱动程序来支持其他用例(SFTP、Ceph、NetApp、S3等等)。
-
主机位置
命名卷:docker 决定
绑定挂载: 自己选择
- 挂载示例(使用-v)
命名卷:my-volume:/usr/local/data
绑定挂载:/path/to/data:/usr/local/data
3.使用容器内容填充新卷
命名卷:支持
绑定挂载:不支持
4.是否支持卷驱动程序
命名卷:支持
绑定挂载:不支持
二,启动一个开发模式的容器
为了支持开发模式的容器,我们得完成一下步骤:
- 挂载源代码到容器上
- 安装所有依赖,包括开发依赖。
- 开启nodemon 来监测文件系统的变化
步骤如下:
-
删除之前所有的
getting-started容器。 -
从应用程序文件夹开始运行如下命令。
x86-64 Mac 和 Linux 系统, 用如下命令。
$ docker run -dp 3000:3000 \ -w /app -v "$(pwd):/app" \ node:12-alpine \ sh -c "yarn install && yarn run dev"Windows 在PowerShell使用如下命令。
PS> docker run -dp 3000:3000 ` -w /app -v "$(pwd):/app" ` node:12-alpine ` sh -c "yarn install && yarn run dev"如果使用的 Apple silicon Mac 或其他 ARM64 设备, 使用如下命令.
$ docker run -dp 3000:3000 \ -w /app -v "$(pwd):/app" \ node:12-alpine \ sh -c "apk add --no-cache python2 g++ make && 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(alpine 不支持bash)运行yarn install安装所有依赖并运行yarn run dev. 查看package.json, 可以看到dev脚本运行nodemon.
-
使用
docker logs$ 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 3000看完日志,使用
Ctrl+C退出。 -
现在修改一些内容.
src/static/js/app.js文件, 修改 “Add Item” 按钮来添加一些代办 ,109行:- {submitting ? 'Adding...' : 'Add Item'} + {submitting ? 'Adding...' : 'Add'} -
刷新页面就可以看到修改,重启node可能需要几分钟, 如果有错误,请刷新页面。
-
可以随意修改内容,修改好之后 停止容器,重新build镜像:
$ docker build -t getting-started .
使用绑定挂载是最普遍的本地开发方式。最大的好处是开发机器不需要安装任何构建工具或者开发环境。运行docker run 命令, 开发环境就准备好了。
如果觉得阿萨的内容对你有帮助,欢迎围观点赞。