一起学Docker7使用绑定挂载bin

北京正规皮炎医院 http://news.39.net/bjzkhbzy/210816/9322703.html

在上一章中,我们讨论了具名卷,并用它将我们数据库中的数据做了持久化。如果我们只是想要存储数据的话,具名卷再合适不过了,因为我们不需要担心数据存在哪里。

有了绑定挂载,我们就能够控制宿主机上确切的挂载点了。我们可以用它来做数据持久化,但是它通常用来给容器提供额外的数据。在开发应用的时候,我们能够使用绑定挂载将我们的源代码挂载进容器中,让容器能够看到代码变更,做出响应,同时马上让我们也能看到应用的修改效果。

对于基于Node的应用来说,nodemon是一个用来监控文件变化,进而重启应用的好帮手。至于其它编程语言或框架呢,大多数也都有相类似的工具。

简单的卷类型比较

绑定挂载和具名卷是Docker引擎自带的2种主要类型的卷。不过还有支持其它使用情况的卷驱动器在,比如用于SFTP,Ceph,NetApp,S3等等。

具名卷和绑定挂载的对比如下:

启动一个开发模式的容器

要让我们的容器支持开发工作流程,我们需要做几件事:

1、将源代码挂载进容器

2、安装所有依赖,包括开发依赖

3、启动nodemon来监控文件系统的修改

好了,让我们开始吧。

1、确保当前没有之前getting-started的容器在运行。

2、在教程范例项目所在的路径下,运行以下命令,后续会做解释:

dockerrun-dp:\

-w/app-v"$(pwd):/app"\

node:12-alpine\

sh-c"yarninstallyarnrundev"

你如果和我一样,现在是在PowerShell中运行命令的话,那么就使用下面这个命令:

dockerrun-dp:`

-w/app-v"$(pwd):/app"`

node:12-alpine`

sh-c"yarninstallyarnrundev"

-dp:

和之前一样,以分离(后台)模式运行容器,并创建端口映射

-w/app

设置了工作路径,或者说命令从哪里开始运行的路径

-v"$(pwd):/app"

把宿主机中,当前执行这条命令所在的路径,挂载到容器中的/app路径

其中"$(pwd)"是WindowsPowerShell中的语法,运行pwd命令获取当前路径,并获取返回值对应的字符串。如图:

这也就是为什么要在教程范例项目所在的路径下运行命令的原因:所谓把当前路径映射到容器的/app其实就是把源代码直接映射到容器中。所以我是直接在vscode所集成的命令行中运行的。

node:12-alpine

指定了作为容器运行基础的镜像。注意,这是Dockerfile中,为我们的应用所指定的基础镜像。

sh-c"yarninstallyarnrundev"

容器执行的命令。我们使用sh来启动shell,alpine没有bash。运行yarninstall来安装所有依赖,并运行yarnrundev,用来做什么呢?如果你看一眼package.json文件的话,我们会看到:dev脚本其实是在启动nodemon。

3、命令运行以后,因为项目需要下载依赖,可能要花些时间。怎么样才能知道项目已经正常启动了呢?可以使用dockerlogs-f容器id以follow模式查看容器内部的日志。当你看到以下内容,说明应用正常启动了。按Ctrl+C退出。

4、现在,让我们对应用做一个修改。在src/static/js/app.js文件中,把"AddItem"按钮改成"添加"。这行代码应该在文件的行。

修改之前,我们先来截图留念,修改之前是这个样子的:

修改代码:

5、刷新网页浏览器页面,就能看到我们所做的修改立即反映在:

6、可以随意去做其它修改。完成以后,停止容器,使用dockerbuild-tgetting-started.命令构建新镜像。

使用绑定挂载是非常常见的用于本地开发的设置。优点是开发机器不需要安装完整的构建工具和开发环境。只需要一个dockerrun命令,开发环境就可以拉下来,并且一切就绪。我们会在之后的步骤中,讨论DockerCompose,这会帮助我们简化命令(其实我们已经用了很多旗标了,是该简化以下了)。

回顾

现在,我们能够把我们的数据库持久化,快速响应投资者和老板们的需求。牛啊!但是,你猜怎么着?我们收到了好消息!

项目已经被选择用于未来的开发了!

为了给上线做准备,我们需要把我们的数据库从SQLite迁移成更有利于规模化的数据库引擎。简便起见,我们仍旧会保留关系型数据库,并把我们的应用切换成MySQL。但是,我们怎么运行MySQL呢?我们又怎么让容器与容器之间相互沟通呢?下一期,我们不见不散!

如果您在阅读和操作中,有任何问题,欢迎评论区提出或者给我发私信哈。




转载请注明:http://www.aierlanlan.com/rzfs/6440.html