docker存储管理

编程入门 行业动态 更新时间:2024-10-20 11:28:05

<a href=https://www.elefans.com/category/jswz/34/1771431.html style=docker存储管理"/>

docker存储管理

docker存储概念

容器本地存储与Docke存储驱动

容器本地存储:每个容器都被自动分配了内部存储,即容器本地存储。采用的是联合文件系统。通过存储驱动进行管理。

容器本地存储空间:分层结构构成,由一个可写容器层和若干只读的镜像层组成。

联合文件系统:Docker的一种底层技术,由存储驱动(Storage Driver)实现。相应的存储驱动有aufs、overlay、overlay2、devicemapper、btrfs、zfs、vfs等。

存储驱动:控制镜像和容器在 docker 主机上的存储和管理方式。

每个Docker主机只能选择一种存储驱动,不能为每个容器选择不同的存储驱动。

查看主机支持的存储驱动
[root@localhost ~]# docker info
# 找到如下信息Storage Driver: overlay2           # 存储驱动是overlay2Backing Filesystem: xfs           # 底层文件系统是xfsSupports d_type: true             # 支持d_typeNative Overlay Diff: trueuserxattr: false
更改现有的存储驱动

可以根据需要修改现有的存储驱动。

注意:

  • 一个主机只能选择一个存储驱动。
  • 系统版本和存储驱动的兼容问题。
  • 更改存储驱动会使得现有的容器和镜像不可访问(原因:每种存储驱动存储镜像层的位置是不同的)
  • 但恢复存储驱动,可以再次访问之前的镜像和容器
# 修改daemon.json文件来更改存储引擎配置
[root@localhost ~]# vi /etc/docker/daemon.json 
{"registry-mirror":[""],"storage-driver":"overlay"                           《————————添加这个信息
}
# 重启docker生效
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker info
# 找到如下信息Storage Driver: overlay                 《————————修改生效Backing Filesystem: xfsSupports d_type: true
# 更改存储驱动会使得现有的容器和镜像不可访问
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
# 恢复存储驱动,可以再次访问之前的镜像和容器
[root@localhost ~]# vi /etc/docker/daemon.json  
{"registry-mirror":[""]
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED        SIZE
ubuntu             latest    825d55fb6340   2 weeks ago    72.8MB
centos             latest    5d0da3dc9764   7 months ago   231MB

容器和非持久化数据

非持久化数据:不需要保存的数据。容器本地存储中的数据属于非持久化数据。

容器创建时会创建非持久化存储,非持久化存储自动创建,从属于容器,生命周期与容器相同。删除容器也会删除全部非持久化数据。

非持久化数据存在问题:

  1. 这类数据从属于容器,生命周期与容器相同,会随着容器的删除而被删除。(易丢失)
  2. 当该容器不再运行时,数据不会持久保存,如果另一个进程需要,则可能很难从该容器中获取数据。(难获取)
  3. 容器的可写层与运行容器的Docker主机紧密耦合,无法轻松地将数据转移到其他位置。(难转移)
  4. 写入容器的可写层需要Docker存储驱动管理文件系统。存储驱动使用Linux内核提供的联合文件系统,其性能不如直接写入主机文件系统的Docker卷。(读写性能差)

容器和持久化数据

持久化数据:需要保存的数据。例如:日志、业务数据、客户信息等有用的数据。

外部存储:Docker通过将主机中的文件系统挂载到容器中供容器存取,从而实现持久化数据存储。

容器持久化数据存储方式:Docker目前支持卷、绑定挂载,这两种挂载类型实现容器的持久化。

卷(数据卷):Docker中进行持久化数据存储的最佳方式。本质是Docker主机文件系统中的目录或文件直接挂载到容器的文件系统中。

卷和容器是解耦的,可以独立地创建并管理卷
卷不与容器的生命周期绑定(容器的停止删除和卷无关)
可以将任意数量的卷装入容器,多个容器也可以共享一个或多个卷(多对多关系)

挂载类型

往容器中挂载的外部文件系统主要有:卷、绑定挂载、tmpfs挂载。无论哪种挂载,对容器内部来说是一样的,都会显示为文件或目录。

卷存储在主机文件系统中由Docker管理的位置,在Linux主机上该位置默认就是/var/lib/docker/volumes目录。

卷是Docker持久化存储数据的最佳方式。卷支持使用卷驱动,可以让用户将数据存储在远程主机或云提供商处等。

可以以命名方式或匿名方式挂载卷:

  1. 匿名卷(Anonymous Volumes):首次挂载容器未指定名称,Docker为其随机指定一个唯一名称。
  2. 命名卷(Named Volumes):指定明确名称,和匿名卷其他特性相同。

卷由Docker创建并管理,卷适合以下应用场景。

  1. 在多个正在运行的容器之间共享数据。(数据共享)
  2. 当Docker主机不能保证具有特定目录结构时,卷有助于将Docker主机的配置与容器运行时解耦。(构建新目录与主机不同)
  3. 当需要将容器的数据存储到远程主机或云提供商处,而不是本地时。(可以远程挂载卷,公有云、灾备等场景)
  4. 当需要在两个Docker主机之间备份、恢复或迁移数据时。(主机间备份迁移)

绑定挂载

绑定挂载可以存储到主机系统的任意位置,甚至会存储到一些重要的系统文件或目录中。

特点:

  1. 主机上进程或容器可以随时修改。
  2. 相比卷,功能更受限、性能更高。
  3. 绑定挂载运行访问敏感文件。

绑定挂载适合以下应用场景。

  1. 在主机和容器之间共享配置文件。
  2. 在Docker主机上的开发环境和容器之间共享源代码或构建工件。
  3. 当Docker主机上的目录结构保证与容器要求的绑定挂载一致时。

tmpfs挂载

tmpfs挂载仅限于运行Linux操作系统的Docker主机使用,它只存储在主机的内存中,不会被写到主机的文件系统中,因此不能持久保存容器的应用数据。
在不需要将数据持久保存到主机或容器中时,tmpfs挂载最合适。
如果容器产生了非持久化数据,那么可以考虑使用tmpfs挂载避免将数据永久存储到任何位置,并且通过避免写入容器的可写层来提高容器的性能。

docker卷

docker volume是Docker卷的管理命令。

# 语法
[root@localhost volumes]# docker volume
Usage:  docker volume COMMAND
Manage volumes
Commands:create      Create a volume                                            # 创建卷inspect     Display detailed information on one or more volumes        # 查看卷的详细信息ls          List volumes                                               # 列出本地docker主机上的卷prune       Remove all unused local volumes                            # 删除未被使用的卷rm          Remove one or more volumes                                 # 删除指定卷

创建卷

使用 docker volume create命令创建卷。

# 语法
[root@localhost volumes]# docker volume create --help
Usage:  docker volume create [OPTIONS] [VOLUME]
Create a volume
Options:-d, --driver string   Specify volume driver name (default "local")     # 说明卷驱动名称(默认是'local')--label list      Set metadata for a volume                        # 设置卷元数据-o, --opt map         Set driver specific options (default map[])      # 设置驱动特殊选项# 案例1:创建普通卷
[root@localhost volumes]# docker volume create test-vol01
test-vol01
[root@localhost volumes]# docker volume inspect test-vol01
[{"CreatedAt": "2022-04-27T17:02:27+08:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/test-vol01/_data","Name": "test-vol01","Options": {},"Scope": "local"}
]# 案例2:创建tmpfs卷,大小100m,uid为1000
[root@localhost volumes]# docker volume create --driver local \
> --opt type=tmpfs \
> --opt device=tmpfs \
> --opt o=size=100m,uid=1000 \
> test-vol02
test-vol02
[root@localhost volumes]# docker volume inspect test-vol02
[{"CreatedAt": "2022-04-27T17:10:21+08:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/test-vol02/_data","Name": "test-vol02","Options": {"device": "tmpfs","o": "size=100m,uid=1000","type": "tmpfs"},"Scope": "local"}
]# 案例3:设置元数据
[root@localhost volumes]# docker volume create --label city=wuhan test-vol03
test-vol03
[root@localhost volumes]# docker volume inspect test-vol03
[{"CreatedAt": "2022-04-27T17:07:44+08:00","Driver": "local","Labels": {"city": "wuhan"},"Mountpoint": "/var/lib/docker/volumes/test-vol03/_data","Name": "test-vol03","Options": {},"Scope": "local"}
]

查看卷列表

使用 docker volume ls 命令列出当前的卷。

format关键词:

PlaceholderDescription
.NameVolume name
.DriverVolume driver
.ScopeVolume scope (local, global)
.MountpointThe mount point of the volume on the host
.LabelsAll labels assigned to the volume
.LabelValue of a specific label for this volume. For example {{.Label “project.version”}}
# 语法
[root@localhost volumes]

更多推荐

docker存储管理

本文发布于:2024-03-08 19:17:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722000.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:docker

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!