docker的存储


Docker 的存储功能分为几个主要部分,每个部分都有不同的作用和适用场景,以下是对这些部分的详细说明: ## Volumes(卷) Volumes 是 Docker 推荐的持久化存储方式,可以将容器数据独立存储在主机文件系统中。即使容器被删除,数据也不会丢失。 设置卷的存储位置 卷会被存储在 Docker 的默认数据目录中:

/var/lib/docker/volumes/<volume_name>/_data # Linux
C:\ProgramData\Docker\volumes\<volume_name>\_data # Windows
运行以下命令查看某个卷的具体路径:
docker volume inspect my_volume
如果希望将卷存储到非默认路径,可以通过修改 Docker 的配置文件(通常位于 /etc/docker/daemon.json,没有的话可以新建)来实现:
{
    # 将 Docker 数据目录修改为 /home/docker。
    "data-root": "/home/docker"
}
其实这里本质上是修改了 Docker 的数据目录,卷的数据也会存储在这个目录中,我们可以通过docker info查看 Docker 的根目录。

切记如果之前已经有数据,需要将数据从/var/lib/docker迁移到新的目录/home/docker中。

systemctl stop docker # 停止 Docker 服务
rsync -avz /var/lib/docker /home/docker # 迁移数据
systemctl start docker # 启动 Docker 服务

设置后重启 Docker 服务:sudo systemctl restart docker,所有新创建的卷都会存储在新的数据目录/home/docker/volumes中。可以在通过docker volume inspect my_volume查看卷的具体路径,或者docker info查看 Docker 的根目录。

卷可以被不同的容器共享,也可以在多个容器之间传递数据。

注意 1. 不要直接修改卷目录中的文件:如果直接修改主机上的卷目录中的数据,可能导致数据损坏或无法被容器识别。 2. 备份与迁移:可以通过主机上的路径对卷数据进行备份或迁移。

使用方式 - 创建一个 volume

docker volume create my_volume

  • 在容器中挂载 volume,通过挂载卷可以实现数据持久化,即使容器被删除,卷中的数据仍然保留。
    docker run -d --name my_container -v my_volume:/app/data my_image
    # -d: 分离模式,后台运行容器
    # --name: 容器名称
    # -v: 挂载 volume
    # my_image: 镜像名称
  • 查看 volume
    docker volume ls
  • 删除 volume
    docker volume rm my_volume

Bind mounts(绑定挂载)

Bind Mount 将主机上的文件或目录直接挂载到容器中,主机上的数据可以实时更新到容器中,反之亦然。

使用方式-在运行容器时指定绑定挂载:

docker run -d --name my_container -v /path/on/host:/path/in/container my_image
适用场景: 1. 开发环境中需要实时同步主机和容器数据。 2. 在主机上有特定目录需要容器访问(如配置文件)。

注意: 绑定挂载没有卷的隔离性和安全性,需谨慎操作主机文件。

tmpfs Mounts(临时文件系统挂载)

tmpfs 挂载将数据存储在内存中,而不是磁盘上。数据是临时的,容器停止后数据会丢失。

使用方式-在运行容器时使用 --tmpfs 选项:

docker run -d --name my_container --tmpfs /app/data my_image
# /app/data 是容器内部的路径,应用程序在该路径下操作数据。
适用场景: 1. 临时数据存储,例如缓存或临时文件。 2. 对性能要求较高且数据无需持久化的场景。

Storage Drivers(存储驱动)

存储驱动管理容器和镜像的底层存储。每种存储驱动适用于不同的文件系统和操作场景。 可以详情查看官方文档,有具体的图示和说明,对镜像和容器的存储方式有更深入的了解。

常用驱动: 1. OverlayFS:默认驱动,适用于大多数 Linux 发行版。 2. BTRFS:支持高级功能,如快照和压缩。 3. ZFS:高性能存储驱动,适用于复杂存储需求。 4. Device Mapper 和 AUFS:较老的存储驱动。

使用方式:- 检查当前存储驱动:

docker info | grep Storage

建议

Docker 提供了一些存储管理的建议: 1. 优先使用 Volumes:推荐用 Volumes 来替代 Bind Mount,确保数据隔离性和安全性。 2. 避免直接使用容器层存储:容器层的存储是临时的,适用于短期任务,不建议用于持久化数据。 3. 定期清理未使用的卷:docker volume prune 命令可以清理未使用的卷,释放磁盘空间。


文章作者: 庞贝堡垒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 庞贝堡垒 !
评论
  目录