简介
Volume是计算机存储技术中的一个术语,用于表示一块独立的存储空间。在操作系统中,一个硬盘可以被分为多个分区,每个分区可以被格式化为一个独立的卷,这个卷就被称为Volume。 Volume通常是指一个逻辑存储单元,可以是硬盘、U盘、SD卡等存储介质的一个分区,也可以是网络存储设备(如NAS)中的一个共享文件夹。每个Volume都有自己的文件系统和存储空间,可以被操作系统和应用程序用来存储和管理数据。 在Windows操作系统中,每个Volume都有一个唯一的卷标(Volume Label)用于标识和区分不同的Volume。在Linux系统中,每个Volume都有一个挂载点(Mount Point)用于将Volume挂载到文件系统中,并访问其中的数据。 使用Volume的好处是可以更好地管理和组织文件,可以将不同类型的文件存储在不同的Volume中,也可以对Volume进行备份和恢复。此外,使用Volume还可以提高系统的性能和可靠性,因为每个Volume都有自己的文件系统和存储空间,不同的Volume之间互不影响,一个Volume出现问题时也不会影响其他Volume的正常使用。
正常停止容器,容器里的数据会丢失吗
正常停止容器时,容器里的数据不会丢失。在Docker中,容器里的数据是存储在数据卷(Volume)或挂载点(Mount Point)中的。数据卷或挂载点可以将容器内部的文件系统与主机的文件系统进行关联,从而实现数据的持久化保存。当容器停止时,数据卷或挂载点仍然存在,并不会被删除。 如果容器被重新启动,数据卷或挂载点中的数据也可以被恢复。当使用“docker run”命令启动容器时,可以使用“-v”参数指定数据卷或挂载点的位置,从而将容器内部的文件系统与主机的文件系统进行关联。这样可以确保容器内的数据在容器启动和停止时都能得到保留。 需要注意的是,如果容器被删除,数据卷或挂载点中的数据也会被删除。因此,对于重要的数据,建议使用数据卷进行持久化保存,并定期备份数据卷中的数据。文件地址为:/var/lib/docker/volumes/
[root@docker ~]# cd /var/lib/docker/volumes
[root@docker volumes]# ls
3d556a4d9feffcf4c1f715ec4dc724d520b1f9245a9250946cbb4db4ddb5d35 backingFsBlockDev
6e8614ba6de867faa0172306789f43befb1c44908c28658d237db5286572e2b c7739d440120add67c8b6d41e541b8605e424c7d1624bb4e64d775cbacc0db0
9b9c7bc8c9e50468ea3749a4cb0e64a43b399f4b0f54eca2b09126afb391dbf metadata.db
[root@docker volumes]# docker inspect sc-redis-1|grep -i volume
"VolumeDriver": "",
"VolumesFrom": null,
"Type": "volume",
"Source": "/var/lib/docker/volumes/3d556a4d9feffcfc1bf715ec4dc724d520b1f9245a9250946cbb4db4ddb5d35/_data",
"Volumes": {
[root@docker volumes]# cd 3d556a4d9feffcf4c1bf715ec4dc724d520b1f9245a9250946cbb4db4ddb5d35/
[root@docker 3d556a4d9feffcfc1bf715ec4dc724d520b1f9245a9250946cbb4db4ddb5d35]# ls
_data
[root@docker 3d556a4d9feffcfc1bf715ec4dc724d520b1f9245a9250946cbb4db4ddb5d35]# cd _data/
[root@docker _data]# ls
dump.rdb
[root@docker _data]#
如何将容器里的数据保存到宿主机
使用直接挂载
可以使用直接挂载(Bind Mount)的方法将容器内的数据保存到宿主机上。具体步骤如下:
- 创建一个本地目录,用于保存容器内的数据。例如,我们创建一个目录“/web:/usr/share/nginx/html”。
- 启动一个容器,并将本地目录与容器内的目录进行关联。可以在“docker run”命令中使用“-v”参数指定本地目录的位置,并将其映射到容器内部的目录。例如,我们将本地目录“/web:”映射到容器内部的目录“//html”:
- 在容器内部的“/html”目录中写入需要保存的数据。
- 停止容器。可以使用“docker stop”命令停止容器。
- 容器内的数据已经保存到本地目录“/usr/share/nginx/html”中了,可以在本地目录中查看和管理数据。 需要注意的是,使用直接挂载的方法保存数据时,宿主机上的文件会覆盖容器内的文件。因此,建议在使用直接挂载的方法时,仅将容器内的数据保存到宿主机上的一个特定目录中,以免误删重要文件。
root@docker /]# docker run --name w-nginx-1 -d -p 3366:80 -v /web:/usr/share/nginx/html nginx
03a794ac88c190d406f89bf892ebb02520cd2df48d4f792b89ccab27d5d9fc25
[root@docker /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03a794ac88c1 nginx "/docker-entrypoint.…" 7 seconds ago Up 5 seconds 0.0.0.0:3366->80/tcp, :::3366->80/tcp w-nginx-1
可以使用Docker的数据卷(Volume)或挂载点(Mount Point)功能将容器内的数据保存到宿主机上。具体步骤如下:
- 创建一个数据卷或挂载点。可以使用“docker volume create”命令创建一个数据卷,也可以在“docker run”命令中使用“-v”参数指定一个本地目录作为挂载点。
- 启动一个容器,并将数据卷或挂载点与容器内部的目录进行关联。可以在“docker run”命令中使用“-v”参数指定数据卷或挂载点的位置,并将其映射到容器内部的目录。
- 将需要保存的数据写入到容器内部的目录中。可以在容器内部使用命令或脚本生成或修改文件。
- 停止容器。可以使用“docker stop”命令停止容器。
- 复制保存的数据到宿主机上。可以使用“docker cp”命令将容器内部的数据复制到宿主机上的指定目录中。
[root@docker /]# docker volume create w-vol
w-vol
[root@docker /]# docker volume ls
DRIVER VOLUME NAME
local c7739d440120add675c8b6d41e541b8605e424c7d1624bb4e64d775cbacc0db0
local w-vol
[root@docker /]# docker volume inspect w-vol
[
{
"CreatedAt": "2023-04-18T17:02:03+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/w-vol/_data",
"Name": "w-vol",
"Options": null,
"Scope": "local"
}
]
[root@docker /]# docker run --name w-nginx-2 -d -p 3367:80 --mount source=w-vol,target=/usr/share/nginx/html nginx
dabac3b5eed800f1cc33e5923a9d47b3667c870017791c090cccacaf9b86c9d4
[root@docker /]#