当前位置:首页>Linux>Linux | Dockerfile数据卷类型

Linux | Dockerfile数据卷类型

  • 2026-08-23 00:27:21
Linux | Dockerfile数据卷类型

点击关注,更多精彩

2026 HAPPYING

Dockerfile 数据卷类型

默认情况下,容器内产生的数据会随着容器的删除而消失。

卷(Volume)是一种将宿主机上的存储空间挂载到容器内的方法,从而实现数据的持久化或与宿主机及其他容器共享。

1

Volume 最典型的 Docker 卷

宿主机存储位置: 由 Docker 自动管理,通常在 Linux 系统上是 /var/lib/docker/volumes/<volume_name>/_data

创建方式:

1、docker volume create <volume_name>

2、docker run -v <volume_name>:/path/inpath/in/container ...

3、docker run -v /path/in/container ... (匿名卷,名字是随机哈希值)

4、Dockerfile 中的 VOLUME /path/in/container 指令也会创建匿名卷。

生命周期:

卷的生命周期独立于容器。删除容器不会自动删除卷。

必须使用 docker volume rm 或 docker volume prune 来删除。

适用场景:

1、数据库数据 (如 MySQL, PostgreSQL):这是最佳实践,数据安全性与容器解耦。

2、需要备份、迁移或跨容器共享的数据。

3、当你不想暴露宿主机文件系统结构时。

示例:

    # docker-compose.yml

    services:

      mysql:

        image: mysql:8.0

        volumes:

          - db_data:/var/lib/mysql # 使用命名的 managed volume

    volumes:

      db_data: # 声明一个 managed volume

2

Bind:直接挂载宿主机上的

一个特定文件或目录到容器中

宿主机存储位置: 由你自己指定的任何有效路径(如 /home/user/app:/app)

创建方式:

1、docker run -v /host/path:/container/path ...

2、docker run --mount type=bind,source=/host/path,target=/container/path ...

生命周期:

完全依赖于宿主机上的文件或目录。删除容器对宿主机文件毫无影响。

其存在与否由用户直接在宿主机上管理。

特点与场景:

双向同步:宿主机和容器任何一方的修改都会立即反映在另一方。

开发环境神器:将本地代码目录挂载到容器中,无需重新构建镜像即可测试代码更改。

挂载配置文件(如 -v ./my.cnf:/etc/mysql/conf.d/custom.cnf)。

挂载 Docker Socket(如 -v /var/run/docker.sock:/var/run/docker.sock),用于在容器内控制 Docker 守护进程。

示例:

    # docker-compose.yml

    services:

      web_app:

        image: node:18

        working_dir: /app

        volumes:

          - ./src:/app/src # 将当前目录下的 src 文件夹绑定到容器的 /app/src

          - ./config.json:/app/config.json # 绑定 绑定单个配置文件

3

tmpfs:将数据存储在宿主机的

内存中,而不是硬盘上

宿主机存储位置: RAM(内存)。

创建方式:

1、docker run --tmpfs /container/path ...

2、docker run --mount type=tmpfs,target=/container/path ...

生命周期:

容器停止时,数据立即丢失。

宿主机重启时,数据丢失。

特点与场景:

极高读写速度(因为是内存操作)。

绝对安全:适合存放临时性、敏感性的数据,如 session、临时缓存等,确保数据不会落入硬盘。

避免写入不需要持久化的临时数据,以减少对容器写时复制(CoW)文件系统的开销。

示例:

    # docker-compose.yml

    services:

      web_server:

        image: nginx:alpine

        tmpfs:

          - /var/cache/nginx # 将 Nginx 的缓存目录放在内存中

          - /tmp

4

Named Pipe (npipe)

这是一个特殊类型,主要用于在 Windows 容器 和宿主机 Windows 系统之间进行通信。

宿主机存储位置: 不是一个目录,而是一个命名管道资源。

创建方式:

docker run -v \\.\pipe\<pipe_name>:\\.\pipe\<pipe_name_in_container> ...

生命周期:

作为通信端点存在。

特点与场景:

主要用于 Windows 环境。

让容器内的进程可以通过命名管道与宿主机上的进程进行通信。

一个常见用法是挂载 Docker 的命名管道,使 Windows 容器能够与宿主机的 Docker 引擎对话(类似于 Linux 下挂载 /var/run/docker.sock)。

示例: powershell

Windows PowerShell 中运行

docker run -v \.\pipe\docker_engine:\.\pipe\docker_engine ...

公众号:初见别辞

壁纸分享 | 电脑技术 | 头像

你们点点“分享”,给我充点儿电吧~

壁纸自取区

点击图片,长按保存

最新文章

随机文章