在上一章中,我们讨论并使用了一个命名卷来将数据持久化到我们的数据库中。如果我们只想存储数据,命名卷非常有用,因为我们不必担心数据存储在哪里

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

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

快速卷类型比较

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

命名卷

绑定坐骑

主机位置

Docker 选择

你控制

安装示例(使用-v

我的卷:/usr/local/data

/path/to/data:/usr/local/data

用容器内容填充新卷

是的


支持卷驱动程序

是的


启动一个开发模式容器

要运行我们的容器以支持开发工作流,我们将执行以下操作:

  • 将我们的源代码挂载到容器中
  • 安装所有依赖项,包括“dev”依赖项
  • 启动 nodemon 以监视文件系统更改

所以,让我们去做吧!

  1. 确保您没有getting-started运行任何以前的容器。
  2. 运行以下命令。我们将解释之后发生的事情:
<span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code> docker run <span style="color:#8b008b">-dp</span> 3000:3000 <span style="color:#cd5555">\</span>
     <span style="color:#8b008b">-w</span> /app <span style="color:#8b008b">-v</span> <span style="color:#cd5555">"</span><span style="color:#8b008b">$(</span><span style="color:#658b00">pwd</span><span style="color:#8b008b">)</span><span style="color:#cd5555">:/app"</span> <span style="color:#cd5555">\</span>
     node:12-alpine <span style="color:#cd5555">\</span>
     sh <span style="color:#8b008b">-c</span> <span style="color:#cd5555">"yarn install && yarn run dev"</span>
</code></span></span>

如果您使用的是 PowerShell,请使用以下命令:

<span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code> docker run -dp 3000:3000 <span style="color:#cd5555">`</span>
     -w /app -v <span style="color:#cd5555">"</span><span style="color:#8b008b">$(</span><span style="color:#658b00">pwd</span><span style="color:#8b008b">)</span><span style="color:#cd5555">:/app"</span> <span style="color:#cd5555">`</span>
     node:12-alpine <span style="color:#cd5555">`</span>
     sh -c <span style="color:#cd5555">"yarn install && yarn run dev"</span>
</code></span></span>
  • -dp 3000:3000- 和之前一样。在分离(后台)模式下运行并创建端口映射
  • -w /app - 设置“工作目录”或命令将运行的当前目录
  • -v "$(pwd):/app"- 将容器中宿主机的当前目录绑定挂载到/app目录中
  • node:12-alpine- 要使用的图像。请注意,这是来自 Dockerfile 的应用程序的基本映像
  • sh -c "yarn install && yarn run dev"- 命令。我们正在使用sh(alpine 没有bash)启动一个 shell并运行yarn install以安装所有依赖项,然后运行yarn run dev. 如果我们查看package.json,我们将看到dev脚本正在启动nodemon
  1. 您可以使用docker logs -f <container-id>. 当你看到这个时,你就会知道你已经准备好了:
<span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code> docker logs <span style="color:#8b008b">-f</span> <container-id>
 <span style="color:#00688b">$ </span>nodemon src/index.js
 [nodemon] 1.19.2
 [nodemon] to restart at any <span style="color:#658b00">time</span>, enter <span style="color:#cd5555">`</span>rs<span style="color:#cd5555">`</span>
 [nodemon] watching dir(s): <span style="color:#8b008b">*</span>.<span style="color:#8b008b">*</span>
 [nodemon] starting <span style="color:#cd5555">`</span>node src/index.js<span style="color:#cd5555">`</span>
 Using sqlite database at /etc/todos/todo.db
 Listening on port 3000
</code></span></span>

看完日志后,按Ctrl+退出C

  1. 现在,让我们对应用程序进行更改。在src/static/js/app.js文件中,让我们将“添加项目”按钮更改为简单地说“添加”。此更改将在第 109 行:
<span style="color:#0c5176 !important"><span style="background-color:#f5f8fa !important"><code> -                         {submitting ? 'Adding...' : 'Add Item'}
 +                         {submitting ? 'Adding...' : 'Add'}
</code></span></span>
  1. 只需刷新页面(或打开它),您就会几乎立即看到浏览器中反映的更改。Node 服务器可能需要几秒钟才能重新启动,因此如果出现错误,请在几秒钟后尝试刷新。
  2. 随意进行您想要进行的任何其他更改。完成后,停止容器并使用docker build -t getting-started ..

使用绑定挂载对于本地开发设置非常常见。优点是开发机器不需要安装所有的构建工具和环境。只需一个docker run命令,即可拉取开发环境并准备就绪。我们将在以后的步骤中讨论 Docker Compose,因为这将有助于简化我们的命令(我们已经获得了很多标志)。

回顾

在这一点上,我们可以保留我们的数据库并快速响应我们的投资者和创始人的需求和要求。万岁!但猜猜怎么了?我们收到了好消息!

您的项目已被选中用于未来的开发!

为了准备生产,我们需要将我们的数据库从 SQLite 迁移到可以更好地扩展的东西。为简单起见,我们将保留关系数据库并将我们的应用程序切换为使用 MySQL。但是,我们应该如何运行 MySQL?我们如何让容器相互通信?我们接下来会谈到这个!