Docker 数据卷(Docker Volumes)是一个可供 Docker 容器使用的持久化数据存储机制,其数据可以在容器之间共享和重用。数据卷有以下特点:
- 数据卷可以与宿主机上的文件目录或者另一个容器的文件系统挂载关联。
- 容器内部的应用程序可以非常方便地访问数据卷里的数据,就像访问本地文件一样。
- 即使容器被删除,数据卷本身不会被自动删除,因此可以实现数据持久化。
- 使用 Docker 数据卷可以方便地解决一些问题,例如:
- 容器之间需要共享一些数据,可以使用同一个数据卷
- 当多个容器运行同一个应用时,可以将应用配置文件设置为一个数据卷,并挂载到每个容器中
- 打包 Docker 镜像时,大部分的数据可以放在数据卷中,而不是打进镜像中,这样可以减小镜像的大小
数据卷命令
数据卷操作的基本语法:
$ docker volume [command] ... # -- help 查询
-
create:
创建一个 volume 目录 -
inspect:
显示 一个或者多个voluem 详细信息 -
ls:
volume 列表信息 -
prune:
删除未使用的 volume, eq: docker volume prune -
rm:
删除一个或者多个指定的 volume
数据卷挂载
方式1:将主机数据卷与容器挂载
在这种情况下,两个容器将共享同一个数据卷容器,数据会被持久化保存并一直存在于容器间传递。
$ docker run --name sonar \
-p 9000:9000 \
-v data:/opt/sonarqube/data \
-v logs:/opt/sonarqube/logs \
-v extensions:/opt/sonarqube/extensions \
-d \
sonarqube
命令解读:
-
docker run:
创建并运行容器
---name:
自定义容器名称 -
-p:
宿主机端口映射 -
-v:
将主机中已创建的 data 数据卷挂载的容器内的/opt/sonarqube/data 目录 -
-d:
容器后台运行 -
sonarqube:
镜像名称
# 查看 data 数据卷挂载位置信息
$ docker volume inspect data
# 进入挂载目录 mountpoint
$ cd /var/lib/docker/volumes/soanrqube/data/_data
# 修改配置文件
$ vim xxx
方式2:将主机目录与容器内的目录挂载
这种情况下,容器内的数据会被持久化保存到主机上的特定目录中,即使容器被删除,数据也不会丢失.目录挂载与数据卷挂载命令基本一致。
$ docker run --name sonar \
-p 9000:9000 \
-v tmp/sonarqube/data:/opt/sonarqube/data \ # 将主机目录直接与容器内的目录挂载
-v tmp/sonarqube/logs:/opt/sonarqube/logs \
-v tmp/sonarqube/extensions:/opt/sonarqube/extensions \
-d \
sonarqube
以上两种方式数据卷挂载与目录挂载的区别不大,数据卷挂载是由docker管理目录,只是目录较深难找。目录挂载则需要自定义目录,便于查找。
*方式3:使用网络存储驱动程序挂载远程数据卷
可以使用网络存储驱动程序将远程主机上的目录挂载为数据卷,以便容器可以访问远程数据。可以通过如下命令来实现:
docker run --mount type=volume,dst=/container/path,volume-driver=mydriver,readonly myimage
在linux系统中,可以使用ls /
命令查看根目录下的文件和目录。以下是一些常见的目录及其作用:
-
/bin
: 存放二进制可执行文件,用于系统启动和基本功能操作(如ls、cp、cat等)。 -
/boot
: 存放系统启动所需的文件,包括内核镜像、ram磁盘映像(initramfs)和引导加载器(grub)等。 -
/dev
: 存放设备文件,包括硬件设备和虚拟设备。 -
/etc
: 存放系统配置文件,包括网络配置、用户账户、安装软件等。 -
/home
: 存放用户主目录。 -
/lib
: 存放库文件,包括运行时需要链接的应用程序和共享库,例如libc库。 -
/media
: 存放可移动介质,例如u盘和cd-rom。 -
/mnt
: 临时挂载点,用于挂载其他文件系统。 -
/opt
: 存放第三方软件安装目录 // 如: Jenkins、maven、sonarqube等 -
/proc
: 虚拟文件系统,包含当前运行进程信息、系统状态和硬件信息等。 -
/root
: root用户的主目录。 -
/run
: 存放系统运行时需要的临时文件(例如pid文件)。 -
/sbin
: 存放超级用户命令,包括重启服务器或修改系统配置等等。 -
/srv
: 存放服务提供的相关文件,如http、ftp等。 -
/sys
: 虚拟文件系统,用于与linux内核进行交互的接口。 -
/tmp
: 存放临时文件,保存在该目录下的文件可能会在重启后被删除 // 一般放置安装压缩包 -
/usr
: 存放用户的应用程序和数据 // 常用 -
var
: 用于存储变化数据的目录 // docker 容器的数据卷挂载一般放置在该目录下