使用绑定安装
预计阅读时间:5分钟
在上一章中,我们讨论了并使用命名卷将数据持久保存在数据库中。命名卷是巨大的,如果我们只是想存储数据,因为我们不必操心,其中数据存储。
使用bind mounts,我们可以控制主机上的确切安装点。我们可以使用它来持久化数据,但通常用于向容器中提供其他数据。在处理应用程序时,我们可以使用绑定挂载将源代码挂载到容器中,以使其查看代码更改,做出响应并立即查看更改。
对于基于节点的应用程序,nodemon是监视文件更改然后重新启动应用程序的好工具。大多数其他语言和框架中都有等效的工具。
快速的体积类型比较
绑定安装和命名卷是Docker引擎随附的两种主要卷类型。但是,可以使用其他卷驱动程序来支持其他用例(SFTP,Ceph,NetApp,S3等)。
命名卷 | 绑定坐骑 | |
---|---|---|
主机位置 | Docker选择 | 你控制 |
安装示例(使用-v ) |
我的卷:/ usr / local / data | /路径/到/数据:/ usr / local / data |
用容器内容填充新卷 | 是的 | 不 |
支持音量驱动器 | 是的 | 不 |
启动开发模式容器
为了运行我们的容器以支持开发工作流程,我们将执行以下操作:
- 将我们的源代码挂载到容器中
- 安装所有依赖项,包括“ dev”依赖项
- 启动nodemon来监视文件系统更改
所以,让我们开始吧!
-
确保您之前没有
getting-started
运行任何容器。 -
运行以下命令。接下来,我们将说明发生了什么:
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
(没有alpinebash
)启动shell并运行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 3000
看完日志后,请按
Ctrl
+退出C
。 -
现在,让我们对应用程序进行更改。在
src/static/js/app.js
文件中,我们将“添加项目”按钮更改为仅说“添加”。此更改将在第109行上:- {submitting ? 'Adding...' : 'Add Item'} + {submitting ? 'Adding...' : 'Add'}
-
只需刷新页面(或打开页面),您几乎应该立即在浏览器中看到所做的更改。重新启动节点服务器可能需要花费几秒钟的时间,因此,如果出现错误,请尝试在几秒钟后刷新。
-
随时进行您想进行的其他任何更改。完成后,停止容器并使用来构建新映像
docker build -t getting-started .
。
对于本地开发设置,使用绑定安装非常普遍。优点是开发机器不需要安装所有构建工具和环境。仅需一个docker run
命令,即可拉开开发环境并准备就绪。我们将在以后的步骤中讨论Docker Compose,因为这将有助于简化命令(我们已经有了很多标志)。
回顾
在这一点上,我们可以保留我们的数据库,并快速响应我们的投资者和创始人的需求。万岁!但猜猜怎么了?我们收到了好消息!
您的项目已被选定用于将来的开发!
为了准备生产,我们需要将数据库从在SQLite中工作迁移到可以更好地扩展的东西。为简单起见,我们将保留一个关系数据库,并将我们的应用程序切换为使用MySQL。但是,我们应该如何运行MySQL?我们如何允许容器彼此对话?接下来我们再说!
入门,设置,方向,快速启动,简介,概念,容器,码头