CodeGym /课程 /Docker SELF /挂载卷

挂载卷

Docker SELF
第 12 级 , 课程 2
可用

8.1 认识虚拟磁盘

挂载卷(Volumes)是Docker最有用的功能之一。有了它,容器可以轻松访问主机机器上的数据。这个功能让数据管理变得灵活又方便:你可以长期保存信息,在容器之间共享数据,还能毫无压力地备份或者恢复数据,万一出了啥问题也不怕。

卷(Volumes)在Docker中,是一种能够独立于容器保存数据的方式。就算容器被删掉了,存储在卷中的信息依然是安全的。卷可以被挂载到容器上,这样数据就能独立存储并重复使用,不管你创建还是删掉容器多少次,都没问题。

主要卷的类型

  1. 匿名卷(Anonymous Volumes)
    • 如果没有明确为容器指定卷,Docker会自动创建。
    • 用于临时保存数据。
  2. 命名卷(Named Volumes)
    • 由Docker创建并管理。
    • 可以连接到多个容器,即使容器删除或停止,也依然保留。
  3. 绑定挂载(Bind Mounts)
    • 将主机机器上的目录与容器中的目录关联起来。
    • 特别适合访问主机系统上的数据,在开发时非常方便。

挂载卷的docker run命令主要语法


-v <host_path>:<container_path>

完整语法:


docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

挂载卷的主要参数

1. 参数 -v--volume

用于创建命名卷或绑定挂载。

示例:

Terminal

docker run -d -v /host/data:/container/data nginx

2. 参数 --mount

提供更灵活、更详细的挂载卷方式,支持附加参数。

示例:

Terminal

docker run -d --mount type=bind,source=/host/data,target=/container/data nginx

8.2 创建和使用卷

1. 命名卷

命名卷是由 Docker 创建和管理的。它们用于持久化存储需要在容器重启或删除后保留的数据。

创建命名卷:

Terminal

docker volume create my_volume

运行带有卷挂载的容器:

在这个例子中,卷 my_volume 被挂载到容器内的目录 /data 中。写入到 /data 的所有数据都会保存在卷中,即使容器被删除,数据也会保留。

Terminal

docker run -d -v my_volume:/data --name my_container nginx

2. 匿名卷

匿名卷是 Docker 自动创建并与特定容器关联的。它们适用于不需要在容器删除后保留的临时数据。

运行带有匿名卷的容器:

在这个例子中,Docker 会自动创建一个匿名卷,并将其挂载到容器内的目录 /data 中。

Terminal

docker run -d -v /data --name my_container nginx

3. 绑定目录

绑定目录允许将主机系统的目录挂载到容器中。这对于容器和主机系统之间共享数据非常有用。此外,这种方法常用于开发过程中,当源代码存储在主机系统上时。

运行带有绑定目录的容器:

在这个例子中,主机机器上的目录 /host/data 被挂载到容器内的目录 /container/data 中。

Terminal

docker run -d -v /host/data:/container/data --name my_container nginx

8.3 使用卷的例子

1. 保存数据库数据

使用卷来存储数据库数据,即使在容器重启或者更新时也能保留数据。这个特别重要,能在生产环境中保证可靠操作。

例子:

下面的例子中,PostgreSQL 的数据保存在卷 db_data 中,这样确保了即使容器重启或删除,数据依然能保留。

Terminal

docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres

2. 容器间共享数据

有时需要让多个容器共享数据。用卷就可以很方便地实现这一目标。

例子

创建一个卷,并启动两个容器,这两个容器会使用这个卷。两个容器都可以访问卷 shared_data 中的数据,这样就能实现数据共享。

Terminal

docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx

3. 开发和测试

在开发应用时,可以使用绑定目录来在容器和主机之间共享源代码。这样开发者可以在主机上编辑代码,并且容器可以实时使用更新后的代码。

例子

在这个例子中,主机的目录 /path/to/source 挂载到容器 dev_container 的目录 /app 中。这样容器能够直接使用主机系统上的最新源代码。

Terminal

docker run -d -v /path/to/source:/app --name dev_container node
<

8.4 管理卷

Docker 提供方便的命令来管理卷,通过这些命令可以轻松创建、删除和查看卷的信息。

1. 查看所有卷

这个命令会列出主机上所有可用的卷。

Terminal

docker volume ls

2. 查看卷的信息

使用这个命令可以获取卷 my_volume 的详细信息,比如它在主机文件系统上的位置,以及使用这个卷的容器信息。

Terminal

docker volume inspect my_volume

3. 删除卷

这个命令会删除卷 my_volume。在删除之前需要确保该卷未被任何容器使用,否则命令不会执行成功。

Terminal

docker volume rm my_volume

8.5 卷的备份

为了保护数据安全,重要的是要能够创建卷的备份并在需要时恢复它们。

1. 备份卷

在这个例子中,卷 my_volume 的内容被归档到文件 my_volume_backup.tar.gz 中,该文件保存在主机机器的目录 /backup 中。

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. 恢复卷

这个例子从备份文件 my_volume_backup.tar.gz 中恢复卷 my_volume 的内容。

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION