Docker 教程

Docker 数据持久化-数据卷(Volumes)

在 Docker 中,数据卷(Volumes)是一种用于实现数据持久化和在容器之间共享数据的重要机制。

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过了容器的联合文件系统(Union File System),直接在宿主机的文件系统中存储数据。这意味着数据卷中的数据独立于容器的生命周期,即使容器被删除,数据卷中的数据仍然存在。

数据卷的特点

  • 数据持久性:数据卷中的数据在容器停止、删除或重新创建后仍然得以保留。这确保了重要数据不会因为容器的变化而丢失。

  • 容器间共享:多个容器可以同时挂载同一个数据卷,从而实现数据的共享。这对于需要多个容器访问相同数据的场景非常有用,例如在分布式应用中共享配置文件、数据库数据等。

  • 独立于容器文件系统:数据卷的存储不依赖于容器的文件系统,因此不会受到容器文件系统的限制。这使得数据卷可以存储大量数据,并且可以使用宿主机的文件系统工具进行管理和备份。

  • 可移植性:数据卷可以在不同的宿主机和 Docker 环境之间轻松迁移,只要确保数据卷的路径在不同环境中保持一致。这使得在开发、测试和生产环境之间迁移数据变得更加容易。

数据卷的用途

  • 数据库存储:将数据库的数据存储在数据卷中,可以确保数据在容器重启或删除后不会丢失。例如,对于一个 MySQL 数据库容器,可以将数据库文件存储在一个数据卷中,以便在容器出现问题时能够快速恢复数据。

  • 配置文件共享:多个容器可以共享同一个配置文件目录,通过将配置文件存储在数据卷中,然后将数据卷挂载到不同的容器中,可以实现配置文件的统一管理和更新。

  • 数据备份和恢复:由于数据卷独立于容器的生命周期,可以方便地对数据卷中的数据进行备份和恢复。可以使用宿主机的文件系统工具或第三方备份工具对数据卷进行定期备份,以防止数据丢失。

  • 开发和测试环境:在开发和测试过程中,可以使用数据卷来共享代码和数据,使得不同的开发人员可以在各自的容器中访问相同的代码和数据,提高开发效率和协作能力。

docker volume 命令

在 Docker 中,docker volume 命令用于管理 Docker 卷,命令语法如下:

用法:docker volume COMMAND

管理数据卷

命令:
  create 创建一个卷
  inspect 显示一个或多个卷的详细信息
  ls 列出卷
  prune 删除未使用的本地加密卷
  rm 删除一个或多个加密卷
  update 更新一个卷(仅限群集卷)

运行 “docker volume COMMAND --help” 获取更多命令信息。

创建和使用数据卷

使用 docker volume create 命令创建一个独立的数据卷:

root@hxstrive:~# docker volume create myvolume
myvolume

在运行容器时使用 -v 或 --mount 参数来挂载数据卷:

(1)使用 -v 参数:

root@hxstrive:~# docker run --name nginx-test -p 8000:80 -v myvolume:/usr/share/nginx/html -d nginx
88ec95f399669c9dd2930ac92be938aba0a5045fc2c4f8783772b89e77f3d9f7

(2)使用 --mount 参数:

root@hxstrive:~# docker run --name nginx-test --mount source=myvolume,target=/usr/share/nginx/html -d nginx
60a6f63880da2de7d6cae307f10e50aa2b48bbc32a9d7e31af3b16c8097166d8

在上述命令中,启动了一个 nginx 容器,myvolume 是数据卷的名称,/usr/share/nginx/html 是容器内的挂载路径。

数据卷的管理

(1)查看数据卷:

使用 docker volume ls 命令可以列出所有的数据卷。

root@hxstrive:~# docker volume ls
DRIVER    VOLUME NAME
local     4dd47a986c4f454b3687e9c7a22023ed4b34a9661bad3698de031988d9fbc472
local     6d74c9784f01caf4753278cd4fde72644282768538819d2867620c82f7617ea5
local     7d0027b8c80b5171fa64c8f0ce26634bed14aa921d78b66b42d422a09f3368c1
local     3136a16b31d8b1173c53d26d9b92c90b71582e8673cc4a2a464eb2ae4c77a3e3
local     c7feaf981739979c906c07938f3cfcb4c7ba0d3ee0ae08eafe104359e5529dee
local     eb7379c6df64fe830d2ee83fd8b8228e653028a98d9934bc7425234d02d60909
local     ec651aa19eb3cc7441cef7963610dc4cb0bf74f0ec4df5ae26104cc20f9e12df
local     f7f6172c178eda0698d1311d9832d163459a2cbbd7c4d6019dd7f91f237d7f4e
local     myvolume

(2)查看数据卷详情:

使用 docker volume inspect 命令可以查看特定数据卷的详细信息,包括数据卷的路径、创建时间等。

root@hxstrive:~# docker volume inspect myvolume
[
    {
        "CreatedAt": "2024-08-27T15:19:12+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
        "Name": "myvolume",
        "Options": null,
        "Scope": "local"
    }
]

(3)删除数据卷:

当不再需要一个数据卷时,可以使用 docker volume rm 命令删除它。但要注意,只有当数据卷没有被任何容器使用时才能被删除。

root@hxstrive:~# docker volume rm myvolume
myvolume

总结

Docker 数据卷是一种非常有用的机制,它可以帮助实现数据的持久化、容器间的数据共享以及数据的可移植性。通过合理地使用数据卷,可以提高 Docker 应用的可靠性和可维护性。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号