实现宿主机(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指令:提供精细控制和更好的可读性,适合复杂挂载需求和生产环境。

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

### Docker Desktop挂载本地目录容器方法Docker Desktop 中,可以通过 `-v` 或 `--mount` 参数将本地路径挂载容器内部。这种操作允许容器内的应用程序访问宿主机上的文件或目录。 #### 使用 `-v` 参数挂载本地目录 通过 `-v` 参数可以指定宿主机的路径以及容器中的目标路径。其基本语法如下: ```bash docker run -v /host/path:/container/path image_name ``` 其中 `/host/path` 是宿主机上的绝对路径,而 `/container/path` 则是容器内的目标路径[^1]。 #### 使用 `--mount` 参数挂载本地目录 除了 `-v` 外,还可以使用更详细的 `--mount` 参数来进行挂载。这种方式提供了更多的选项灵活性。以下是常见的用法: ```bash docker run --mount type=bind,source=/host/path,target=/container/path image_name ``` 这里的 `type=bind` 表示绑定挂载模式,即直接将宿主机的某个目录映射到容器内[^2]。 #### 容器间不同的挂载设置 如果需要创建多个容器并分别挂载不同的本地目录,则可以在启动每个容器时单独定义对应的挂载参数。例如,在引用中提到的不同 Redis 实例之间存在差异的情况,具体表现为端口号、容器名以及数据目录的区别[^4]。 对于 Windows 用户而言,当利用 WSL2 后台运行 Docker 服务时,默认情况下仅支持特定驱动器下的共享文件夹作为源路径。因此建议先确认已启用对应盘符的自动共享功能或者手动添加额外的卷位置[^3]。 #### 示例代码 下面是一个具体的例子展示如何在一个基于 Ubuntu 的镜像里挂载当前工作区至 `/app` 文件夹下: ```bash docker run -it --name my_ubuntu_container \ -v $(pwd):/app \ ubuntu bash ``` 此命令将会打开一个新的交互式终端会话,并且使得宿主机上执行该指令所在的整个目录结构被同步复制到了新建立起来的名字叫做 "my_ubuntu_container" 的实例当中去。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值