Docker中的卷(Volume)是一个非常重要的概念,它提供了一种在容器和宿主机之间共享和持久化数据的机制。
一、定义与功能
- 定义:Docker卷(Volume)是一种用于在容器和宿主机之间共享和持久化数据的特殊目录或文件。它绕过了Docker的联合文件系统,以正常的文件或目录形式存在于宿主机上。
- 功能:
- 数据持久性:卷中的数据是持久的,不受容器生命周期的限制。即使容器被删除,卷中的数据仍然存在,可以被其他容器重新挂载使用。
- 数据共享:多个容器可以共享同一个卷,这使得在容器之间共享数据变得非常方便。这对于需要共享配置文件、日志、数据库文件等数据的场景非常有用。
- 数据迁移:卷可以在不同的Docker主机之间迁移,实现数据的备份和恢复。
- 数据管理:卷独立于容器的生命周期,可以单独进行管理,包括创建、删除、备份等操作。
二、类型
Docker支持多种类型的卷,包括:
- 本地主机的卷:通常存储在宿主机文件系统上,是Docker默认的卷类型。
- 远程卷:可以使用网络存储,如NFS、Ceph等,实现数据的远程共享和持久化。
- 插件支持的卷:Docker还允许通过插件来支持更多类型的卷,以满足不同的需求。
三、使用与管理
- 创建卷:可以使用
docker volume create
命令创建一个新的卷。 - 挂载卷:在创建或运行容器时,可以通过
-v
或--mount
选项将卷挂载到容器中。这样,容器就可以访问卷中的数据了。 - 删除卷:当卷不再需要时,可以使用
docker volume rm
命令将其删除。但请注意,如果卷正在被容器使用,则无法直接删除。
四、优势
- 提高数据安全性:通过将数据存储在卷中,即使容器被删除,数据也不会丢失,从而提高了数据的安全性。
- 简化数据管理:卷提供了独立于容器生命周期的数据管理方式,使得数据的备份、恢复和迁移变得更加简单。
- 促进容器间的数据共享:多个容器可以共享同一个卷,从而方便地实现容器间的数据共享。
五、如何实现容器与宿主机之间的数据共享
- 创建卷 -- 空文件夹
文件存放位置 /var/lib/docker/volumes/
[root@docker ~]# docker volume create test
- 启动容器,并挂载
[root@docker ~]# docker run -d -p 7070:80 --name test-volume --mount source=test,target=/usr/share/nginx/html nginx
source 源 test 是卷的名字 target 容器里的目标文件夹 --- nginx默认存放网站网页的目录
+-------------------------------------------------------------------------------------------
| 挂载文件系统到容器 有3种格式:
| ① docker run -d -p 7071:80 --name mount-test1 -v /data:/c_data nginx
| ② docker run -d -p 7072:80 --name mount-test2 --mount source=test,target=...
| ③ docker run -d -p 7073:80 --name mount-test3 -v test:/usr/share/nginx/html:ro nginx
| ro:只读(容器只读)
+--------------------------------------------------------------------------------------------
- 创建卷,存放MySQL的数据
[root@docker docker]# docker volume create mysql_data
- 启动容器并挂载该卷
[root@docker docker]# docker run -d -p 33069:3306 --name mysql-1 -e MYSQL_ROOT_PASSWORD='Root@123456789' -v mysql_data:/var/lib/mysql mysql:5.7.41
Docker卷(Volume)是Docker中用于在容器和宿主机之间共享和持久化数据的重要机制。它提供了数据持久性、数据共享、数据迁移和数据管理等功能,是Docker数据管理的重要特性之一。通过合理使用Docker卷,可以大大提高Docker应用的灵活性和可靠性。