跳到主要内容

使用绑定挂载

原页面

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

基于 Node 的应用中,nodemon 是一个极好的工具来查看文件变化并重启应用。其它的语言可能也有类似的工具。

两种挂载方式比较

命名挂载绑定挂载
主机位置Docker 决定你来决定
挂载样例(使用 -v )my-volume:/usr/local/data/path/to/data:/usr/local/data
用容器内容来填充新挂载卷
支持挂载卷驱动

启动一个开发模式的容器

为了在开发工作流中运行我们的容器,我们要做以下这些事:

  • 挂载我们的源代码到容器中
  • 安装所有的依赖,包括“dev”依赖
  • 启动 nodemon 来观察文件系统的变化

让我们来实践一下:

  1. 确保你没有 getting-started 容器正在运行。
  2. 运行以下命令。我们将在之后具体解释:
    docker run -dp 3000:3000 \
    -w /app -v "$(pwd):/app" \
    node:12-alpine \
    sh -c "yarn install && yarn run dev"
    如果你在使用 PowerShell 请使用这个命令。
    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
  3. 你可以用 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 3000
    如果你看完了日志,可以用 Ctrl+C 退出。
  4. 现在,我们更改以下应用。在 src/static/js/app.js 中,我们将 109 行中“Add Item”更改为“Add”。
    - {submitting ? 'Adding...' : 'Add Item'}
    + {submitting ? 'Adding...' : 'Add'}
  5. 简单的刷新网页后,你能立即看到这个变化。
  6. 停止容器,然后用 docker build -t getting-started . 构建一个新的镜像