参考来源:
(应用的容器化实践)docker官方入门指南 https://docs.docker.com/get-started/
本指南包含有关如何开始使用 Docker 的分步说明。本指南介绍如何:
将映像作为容器生成并运行。
使用 Docker Hub 共享映像。
使用带有数据库的多个容器部署 Docker 应用程序。
使用 Docker Compose 运行应用程序。
step6 使用绑定挂载
目录 table of contents
·快速卷类型比较 comparisons
·试用绑定挂载
·开发容器
·在开发容器中运行应用
·使用开发容器开发应用
在第 5 部分中,您使用卷装载将数据保存在数据库中。当您需要持久性位置来存储应用程序数据时,卷装载是一个不错的选择。
绑定挂载是另一种类型的挂载,它允许您将主机文件系统中的目录共享到容器中。在处理应用程序时,可以使用绑定挂载将源代码挂载到容器中。一旦你保存文件,容器就会立即看到你对代码所做的更改。这意味着您可以在容器中运行进程来监视文件系统更改并响应它们。
在本章中,您将了解如何使用绑定挂载和名为 nodemon 的工具来监视文件更改,然后自动重新启动应用程序。在大多数其他语言和框架中都有等效的工具。
快速卷类型比较
以下是使用以下 --mount 方法的命名卷和绑定挂载的示例:
命名卷
命名卷: type=volume,src=my-volume,target=/usr/local/data
绑定安装: type=bind,src=/path/to/data,target=/usr/local/data
下表概述了卷装载和绑定装载之间的主要区别。
试用绑定挂载
在了解如何使用绑定挂载开发应用程序之前,您可以运行一个快速实验(最小功能单元-红细胞),以实际了解绑定挂载的工作原理。
- 验证您的 getting-started-app 目录是否位于 Docker Desktop 的文件共享设置中定义的目录中。此设置定义了可以与容器共享文件系统的哪些部分。有关访问该设置的详细信息,请参阅适用于 Mac、Windows 或 Linux 的主题。
- 打开终端并将目录更改为该 getting-started-app 目录
- 运行以下命令,在具有绑定挂载的 ubuntu 容器中启动 bash 。
docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu bash
- 运行命令后,Docker 会在容器文件系统的根目录中启动交互 bash 式会话
root@ac1237fad8db:/# pwd
/
root@ac1237fad8db:/# ls
bin dev home media opt root sbin srv tmp var
boot etc lib mnt proc run src sys usr
- 将目录更改为 src 目录。
这是您在启动容器时挂载的目录。列出此目录的内容将显示与主机上目录 getting-started-app 中的文件相同的文件。
root@ac1237fad8db:/# cd src
root@ac1237fad8db:/src# ls
Dockerfile node_modules package.json spec src yarn.lock
- 创建一个名为 myfile.txt 的新文件
root@ac1237fad8db:/src# touch myfile.txt
root@ac1237fad8db:/src# ls
Dockerfile myfile.txt node_modules package.json spec src yarn.lock
- 打开主机上的 getting-started-app 目录,并观察 myfile.txt 文件是否在目录中。
├── getting-started-app/
│ ├── Dockerfile
│ ├── myfile.txt
│ ├── node_modules/
│ ├── package.json
│ ├── spec/
│ ├── src/
│ └── yarn.lock
root@ub1804:/home/xiaoyue/workdir/dockerdir/getting-started-app# ls
Dockerfile node_modules README.md src yarn.lock
myfile.txt package.json spec yarn-error.log
- 从主机中删除文件 myfile.txt 。
- 在容器中,再次列出 app 目录的内容。观察文件现在不见了。
root@ac1237fad8db:/src# ls
Dockerfile node_modules package.json spec src yarn.lock
以上就是绑定挂载的简要介绍。此过程演示了如何在主机和容器之间共享文件,以及如何立即在两端反映更改。现在,您可以使用绑定挂载来开发软件。
开发容器
使用绑定挂载在本地开发设置中很常见。优点是开发计算机不需要安装所有生成工具和环境。使用单个 docker run 命令,Docker 会拉取依赖项和工具。
在开发容器中运行应用
以下步骤介绍如何使用执行以下操作的绑定装载运行开发容器:
将源代码装载到容器中
安装所有依赖项
开始 nodemon 监视文件系统更改
可以使用 CLI 或 Docker Desktop 运行具有绑定挂载的容器
1.确保当前没有任何 getting-started 正在运行的容器。
2.从 getting-started-app 目录中运行以下命令。
docker run -dp 127.0.0.1:3000:3000 \
-w /app --mount type=bind,src="$(pwd)",target=/app \
node:18-alpine \
sh -c "yarn install && yarn run dev"
以下是该命令的细分:
-dp 127.0.0.1:3000:3000 - 和以前一样。在分离(后台)模式下运行并创建端口映射
-w /app - 设置“工作目录”或运行命令的当前目录
–mount type=bind,src=“$(pwd)”,target=/app - 绑定将主机中的当前目录挂载到容器中的 /app 目录中
node:18-alpine - 要使用的图像。请注意,这是 Dockerfile 中应用的基础映像
sh -c “yarn install && yarn run dev” - 命令。您正在使用 sh (alpine 没有 bash ) 启动一个 shell,然后运行 yarn install 以安装包,然后运行 yarn run dev 以启动开发服务器。如果查看 package.json ,您将看到 dev 脚本开始 nodemon 。
3.您可以使用 docker logs .当你看到这个时,你就会知道你已经准备好了:
docker logs -f <container-id>
nodemon -L src/index.js
[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/index.js`
Using sqlite database at /etc/todos/todo.db
Listening on port 3000
看完日志后,按 Ctrl + C 退出。
------>个人实践故障处理
root@ub1804:/home/xiao