自学内容网 自学内容网

实现宿主机(Windows 10 Docker Desktop)和Linux容器之间的数据挂载的三种方法

        在Windows 10上使用Docker Desktop运行Linux容器时,经常需要将宿主机上的文件或目录与容器内的文件或目录进行关联,以便实现数据的共享和持久化。Docker提供了多种方法来实现这一目标,包括使用-v选项挂载宿主机目录、创建Docker数据卷以及使用--mount指令进行绑定挂载。本文将详细介绍这三种方法的基本语法、具体实践以及它们各自的使用场景。

 

一、使用-v选项挂载宿主机目录
基本语法

        使用-v选项可以将宿主机上的目录挂载到容器内的指定目录。其基本语法如下:

docker run -d --name <容器名> -v <宿主机目录>:<容器目录> <镜像>

        其中,<宿主机目录>是宿主机上的目录路径,<容器目录>是容器内的目录路径,<镜像>是要启动的Docker镜像名称。

具体实践
  1. 创建宿主机目录

    在Windows 10上,首先创建一个要挂载到容器中的目录。例如,在C:盘下创建一个名为docker_data的目录。

    mkdir C:\docker_data
  2. 启动容器并挂载目录

    使用docker run命令启动一个Linux容器,并将刚才创建的目录挂载到容器内。例如,挂载到容器的/data目录。

    docker run -d --name my-ubuntu -v C:\docker_data:/data ubuntu

    这里,my-ubuntu是容器的名称,ubuntu是使用的Docker镜像名称。

  3. 验证挂载

    进入容器内部,验证挂载是否成功。

    docker exec -it my-ubuntu /bin/bash
    cd /data
    ls

    如果挂载成功,你应该能够在容器的/data目录中看到宿主机C:\docker_data目录中的内容。

使用场景
  • 开发和测试:在开发和测试环境中,经常需要将宿主机上的代码或配置文件挂载到容器内,以便快速进行修改和测试。例如,在开发一个Web应用时,可以将本地的源代码目录挂载到容器的Web服务器目录中。
  • 简单数据共享:需要将宿主机上的某个目录与容器共享的场景,例如将宿主机上的日志目录挂载到容器中,以便在容器中运行的应用可以直接写日志到宿主机上。
二、创建Docker数据卷
基本语法

        Docker数据卷是一种由Docker管理的特殊目录,用于持久化和共享数据。可以通过以下命令创建一个数据卷并将其挂载到容器:

docker volume create <数据卷名称>
docker run -d --name <容器名> -v <数据卷名称>:<容器目录> <镜像>

        其中,<数据卷名称>是自定义的数据卷名称,<容器目录>是容器内的挂载点,<镜像>是要启动的Docker镜像名称。

具体实践
  1. 创建数据卷

    使用docker volume create命令创建一个数据卷。例如,创建一个名为my_volume的数据卷。

    docker volume create my_volume
  2. 启动容器并挂载数据卷

    使用docker run命令启动一个Linux容器,并将刚才创建的数据卷挂载到容器内。例如,挂载到容器的/data目录。

    docker run -d --name my-ubuntu-volume -v my_volume:/data ubuntu
  3. 验证挂载

    进入容器内部,验证数据卷是否成功挂载。

    docker exec -it my-ubuntu-volume /bin/bash
    cd /data
    ls

    由于数据卷是空的,所以此时/data目录应该是空的。但是,你可以在这个目录中创建文件或目录,这些文件或目录将在数据卷中持久化存储。

  4. 查看数据卷信息

    使用docker volume inspect命令查看数据卷的详细信息。

    docker volume inspect my_volume
使用场景
  • 持久化存储:需要在容器重启或删除后仍然保留数据的场景,如数据库数据、应用程序日志等。
  • 多容器数据共享:需要在多个容器之间共享数据的场景,如在微服务架构中不同服务之间共享数据。
三、使用--mount指令进行绑定挂载
基本语法

        绑定挂载(Bind Mounts)是指将宿主机上的一个文件或目录挂载到容器内。使用--mount选项可以提供更精细的控制。其基本语法如下:

docker run -d --name <容器名> --mount type=bind,source=<宿主机目录>,target=<容器目录>[,readonly] <镜像>

        其中,<宿主机目录>是宿主机上的目录路径,<容器目录>是容器内的挂载点,readonly是可选参数,表示以只读方式挂载。

具体实践
  1. 创建宿主机目录

    在Windows 10上,创建一个要挂载到容器中的目录。例如,在D:盘下创建一个名为docker_bind_mount的目录。

    mkdir D:\docker_bind_mount
  2. 启动容器并绑定挂载

    使用docker run命令启动一个Linux容器,并将刚才创建的目录以绑定挂载的方式挂载到容器内。例如,挂载到容器的/mnt/data目录。

    docker run -d --name my-ubuntu-bind -v D:\docker_bind_mount:/mnt/data:ro ubuntu

    这里,D:\docker_bind_mount是宿主机上的目录,/mnt/data是容器内的挂载点,ro表示以只读方式挂载。

  3. 验证挂载

    进入容器内部,验证绑定挂载是否成功。

    docker exec -it my-ubuntu-bind /bin/bash
    cd /mnt/data
    ls

    如果挂载成功,你应该能够在容器的/mnt/data目录中看到宿主机D:\docker_bind_mount目录中的内容。由于是以只读方式挂载的,所以无法在容器内对挂载目录进行修改。

使用场景
  • 需要更精细的挂载配置和选项的场景:例如,某些应用可能需要对配置文件只读访问,而对日志目录则需要读写访问。在这种情况下,可以使用--mount选项明确指定挂载类型和权限。
  • 生产环境:在生产环境中,对挂载行为需要精确控制的场景。使用--mount可以提供更好的可读性和管理性,减少配置错误的可能性。
总结

        在Windows 10上使用Docker Desktop运行Linux容器时,实现宿主机和容器之间的数据挂载有三种主要方法:使用-v选项挂载宿主机目录、创建Docker数据卷以及使用--mount指令进行绑定挂载。每种方法都有其特定的使用场景和优势。

  • 使用-v选项:简单直接,适合开发和测试环境以及简单的共享需求。
  • 创建数据卷:由Docker管理,适合需要持久化存储和多容器数据共享的场景,通常用于生产环境。
  • 使用--mount指令:提供精细控制和更好的可读性,适合复杂挂载需求和生产环境。

        根据具体的需求和使用场景,选择适当的挂载方法可以提高开发效率和系统的稳定性。


原文地址:https://blog.csdn.net/huaqianzkh/article/details/145279217

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!