how to use docker (6) Persisting-Your-Data

Persisting our Data

卷的概念(Container Volumes)

  • 个人理解卷(volume)就是容器运行时挂载的主机上的磁盘空间
  • 容器挂载的几种方式:
    1. named volumes方式 最常用的方式 docker帮我们创建容器时创建,默认保存位置在 /var/lib/docker/volumes 目录中;
    2. bind Mount 比较常用的方式,绑定挂载就是创建容器时候 使用了 -v 参数指定主机上的目录, 但是移植可能不同操作系统可能会不兼容。比如window和linux操作系统之间
    3. tmpfs 一般不会用, 挂载在宿主机的内存中的方式

卷的管理

1
2
3
# docker volume create dockerapp-vol // 创建一个自定义容器卷
# docker volume ls // 查看所有容器卷
# docker volume inspect 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 将其删除。

使用与上面相同的命令启动一个新容器。

打开应用程序。您应该会看到您之前加入的项目仍在您的列表中!

完成检查列表后,继续并移除容器。