Datawhale-Docker学习笔记-0003-数据管理
1. 什么是数据
数据,按照不同的划分方式会有不同的定义。比如,按照是否为连续信息划分,可以划分为模拟数据和离散数据。但是在Docker的内容中,我们更加关注的是数据是否为持久数据。顾名思义,持久化数据就是需要保存的数据,非持久化数据就是不需要保存的那些数据。
并不是说非持久化的数据就不重要,它同样需要我们的重视。在Docker中两者都有相应的支持方式。
首先,每个Docker容器都有自己的非持久化存储。非持久化的存储是自动创建的,依赖于容器,与容器的生命周期相同。当我们删除容器的时候,也将同时删除所有的非持久化数据。如果我们想要将这些数据存储下来,则需要将数据保存在数据卷上。
2. 数据卷
很多时候,我们会认为容器比较适合微服务设计模式。但是,并不能很简单就认为容器只适用于临时场景。
每个容器都被自动分配了本地存储,默认情况下,这是容器全部文件和文件系统保存的地方。我们可以这么理解,非持久化的存储属于容器的一部分,并且与容器的生命周期一致。当我们删除容器的时候,也同时会删除非持久化的存储。
但是如果容器需要产生持久化数据的时候,就需要涉及到数据卷。
卷的工作流程大概如下:
- 用户先创建数据卷
- 用户再创建容器
- 将数据卷挂载到容器上
这样,我们会将数据卷挂载到容器文件系统的某个目录之下,任何写在该目录下的内容都会写到数据卷中。如果你使用过Google的Colab的化,Colab挂载Drive的工作模式就于此类似。
我们可以将数据卷理解为移动硬盘,容器理解为主机。这样我们将硬盘插在主机上,数据保存在硬盘中。然后我们将主机关机,即使我们将主机砸了,数据也不会消失。
3. 数据卷的操作
3.1 创建数据卷
数据卷在Docker中和docker image,docker container一样,都有独立的子命令。数据卷的子命令以docker volume开始 。
docker volume create myVolume
我们可以通过上述指令创建名为myVolume的数据卷。
同时,我们可以通过"-d"选项来指定不同的驱动。如果不指定的化,则默认使用的是内置的local驱动。如果想使用第三方的驱动,我们可以通过下载插件实现。这些插件涵盖了块存储、文件存储、对象存储等等。
3.2 查看已经创建的数据卷
我们可以使用如下指令来查看已经创建的数据卷:
docker volume ls
我们甚至来可以使用如下指令来查看详情:
docker volume inspect myVolume
3.3 启动一个挂载数据卷的容器
在前面的学习中,我们知道可以使用docker container run指令来启动一个容器。在这同时,我们可以使用"–mount"来同时挂载数据卷。
docker container run -i -t\
--name test\
--mount source=myVolume,target=/vol\
ubuntu:latest /bin/bash
其中"–name"是容器的名字。
需要注意的是,在"–mount"选项中,我们不仅仅可以指定source为我们创建的数据卷。还可以是主机的文件夹。使用此功能时,要加上type=bind,路径必须要存在,且必须是绝对路径。
当然,如果你想的化,也可以直接挂载一个主机文件进入容器中。
3.4 删除数据卷
如果我们想要删除一个数据卷,我们需要注意的是不可以删除已经挂载的数据卷。
docker volume rm myVolume # 可以删除指定的数据卷
docker volume prune # 可以删除所有数据卷