Persisting our Data
卷的概念(Container Volumes)
- 个人理解卷(volume)就是容器运行时挂载的主机上的磁盘空间
- 容器挂载的几种方式:
- named volumes方式 最常用的方式 docker帮我们创建容器时创建,默认保存位置在 /var/lib/docker/volumes 目录中;
- bind Mount 比较常用的方式,绑定挂载就是创建容器时候 使用了 -v 参数指定主机上的目录, 但是移植可能不同操作系统可能会不兼容。比如window和linux操作系统之间
- tmpfs 一般不会用, 挂载在宿主机的内存中的方式
卷的管理
1 | # docker volume create dockerapp-vol // 创建一个自定义容器卷 |
持久化应用
让我们来持久化我们的 dockapp 数据
默认情况下,dockapp 应用程序将其数据存储在SQLite 数据库中/etc/todos/todo.db。如果您不熟悉 SQLite,不用担心!它只是一个关系数据库,其中所有数据都存储在一个文件中。虽然这对于大型应用程序来说不是最好的,但它适用于小型演示。稍后我们将讨论将其切换到不同的数据库引擎。
由于数据库是单个文件,如果我们可以在主机上保留该文件并使其可用于下一个容器,它应该能够从上一个停止的地方继续。通过创建一个卷并将其附加(通常称为“挂载”)到存储数据的目录,我们可以持久化数据。当我们的容器写入todo.db文件时,它将被持久化到卷中的主机。
如前所述,我们将使用命名卷。将命名卷视为简单的数据桶。Docker 维护磁盘上的物理位置,您只需要记住卷的名称。每次使用该卷时,Docker 都会确保提供正确的数据。
使用docker volume create命令创建卷。
1 | docker volume create dockerapp-vol |
在仪表板中(或使用docker rm -f
启动 dockerapp 应用程序容器,但添加-v标志以指定卷安装。我们将使用命名卷并将其挂载到/etc/todos,这将捕获在路径上创建的所有文件。
1 | docker run -dp 3000:3000 -v dockerapp-vol:/etc/todos dockerapp |
容器启动后,打开应用程序并将一些项目添加到您的待办事项列表中。
添加到待办事项列表的项目
移除 dockerapp 应用的容器。使用仪表板 或docker ps获取 ID,然后docker rm -f
使用与上面相同的命令启动一个新容器。
打开应用程序。您应该会看到您之前加入的项目仍在您的列表中!
完成检查列表后,继续并移除容器。