Docker 学习笔记(八):持久化数据

75 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情

大家好,我是阿萨。前几天学习了命名卷来持久化数据库中的数据,保证启动容器后数据不丢失。

如果我们只想存储数据,命名卷是很好的选择,因为我们不必担心数据存储在哪里。

通过绑定挂载,我们可以控制主机上的确切挂载点。我们可以使用它来持久化数据,但它通常用于向容器提供额外的数据。在处理应用程序时,我们可以使用绑定挂载将源代码挂载到容器中,让它看到代码更改、作出响应,并让我们立即看到更改。

对于基于节点的应用程序,nodemon是一个很好的工具,可以监视文件更改,然后重新启动应用程序。在大多数其他语言和框架中都有等价的工具。

一,卷类型比较

绑定挂载和命名卷是Docker引擎附带的两种主要卷类型。但是,可以使用其他卷驱动程序来支持其他用例(SFTP、Ceph、NetApp、S3等等)。

  1. 主机位置

命名卷:docker 决定

绑定挂载: 自己选择

  1. 挂载示例(使用-v) 

命名卷:my-volume:/usr/local/data 

绑定挂载:/path/to/data:/usr/local/data

3.使用容器内容填充新卷

命名卷:支持

绑定挂载:不支持

4.是否支持卷驱动程序

命名卷:支持

绑定挂载:不支持

二,启动一个开发模式的容器

为了支持开发模式的容器,我们得完成一下步骤:

  • 挂载源代码到容器上
  • 安装所有依赖,包括开发依赖。
  • 开启nodemon 来监测文件系统的变化

步骤如下:

  1. 删除之前所有的 getting-started 容器。

  2. 从应用程序文件夹开始运行如下命令。

    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.
  3. 使用 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退出。

  4. 现在修改一些内容. src/static/js/app.js 文件, 修改 “Add Item” 按钮来添加一些代办 ,109行:

     -                         {submitting ? 'Adding...' : 'Add Item'}
     +                         {submitting ? 'Adding...' : 'Add'}
    
  5. 刷新页面就可以看到修改,重启node可能需要几分钟, 如果有错误,请刷新页面。

  6. 可以随意修改内容,修改好之后 停止容器,重新build镜像:

     $ docker build -t getting-started .
    

使用绑定挂载是最普遍的本地开发方式。最大的好处是开发机器不需要安装任何构建工具或者开发环境。运行docker run 命令, 开发环境就准备好了。

如果觉得阿萨的内容对你有帮助,欢迎围观点赞。