视窗苹果电脑软件设置安全生产力Linux安卓性能配置苹果自定义设备管理iPhone设置 全部

如何在主机和Docker容器之间共享文件夹

已编辑 2 几个月前 通过 ExtremeHow 编辑团队

Docker 桌面文件夹文件共享主机容器配置开发与运维软件开发云计算虚拟化

翻译更新 2 几个月前

Docker是一种强大的工具,用于在容器内开发和部署应用程序。容器是一个隔离的环境,应用程序可以在其中运行,而不受同一台机器上其他进程的干扰。使用Docker时,您可能会遇到需要在主机和Docker容器之间共享文件或文件夹的情况。本指南将详细而全面地向您展示如何在主机和Docker容器之间共享文件夹的过程。我们将介绍基本概念,举例说明,并探讨潜在的挑战。

理解Docker卷

在进入共享文件夹的步骤之前,理解Docker如何处理数据持久性是很重要的。Docker容器是临时的;一旦关闭,它们中存储的任何数据可能会丢失。Docker提供了各种机制来管理和持久化数据,其中一种主要方式是通过卷。Docker卷是一种持久的数据存储,容器可以访问它,并且它存在于容器生命周期之外。

Docker独立管理卷,这意味着它们与任何特定的容器隔离。这极大地有助于数据持久性,因为即使删除容器,其卷内的数据依然保持完整,可以附加到另一个容器中。卷在主机和Docker容器之间共享文件夹时非常理想,因为它们的生命周期独立于容器,并且可以被显式控制。

Docker卷的类型

Docker支持不同类型的卷以满足不同的用例:

通过绑定挂载共享文件夹

通过绑定挂载在主机与Docker容器之间共享文件夹是最简单的方法。以下是涉及的步骤和一个示例:

使用绑定挂载的分步指南

  1. 在主机上创建目录:

    在您的主机系统上创建一个要与Docker共享的目录。例如,您可以创建一个名为/Users/username/shared的目录。

  2. 修改docker run命令:

    接下来,更新Docker运行命令以包含绑定挂载。在路径映射后使用-v--volume标志。例如,要将/Users/username/shared挂载到容器中的/shared,命令是:

    docker run -v /Users/username/shared:/shared my-image

    在这个例子中,my-image是您运行的Docker镜像。挂载允许在容器内对/shared的任何更改在主机的/Users/username/shared文件夹中反映出来。

  3. 在容器中访问共享文件夹:

    一旦容器通过绑定挂载运行,任何在容器内/shared的文件更改会直接影响主机/Users/username/shared目录中的文件,反之亦然。

绑定挂载使用示例

这里是一个使用Nginx网络服务器在主机和Docker容器之间共享文件的实际示例。假设您想要服务位于主机上的一个目录中的HTML文件:

  1. 设置共享目录:
    • 在主机上创建一个名为website的目录。
    • website目录中添加一个带有内容的index.html文件。
  2. 使用绑定挂载运行Nginx容器:

    使用以下命令将website目录从/usr/share/nginx/html目录绑定到容器中:

    docker run --name my-nginx -v "$PWD"/website:/usr/share/nginx/html:ro -d nginx

    :ro选项使绑定挂载在容器内是只读的。

  3. 访问Nginx服务器:

    在网页浏览器中访问http://localhost以查看由Nginx从主机上的共享目录提供的index.html文件。

使用Docker卷共享文件夹

尽管绑定挂载直接与主机文件系统的路径相关,但Docker卷更抽象,由Docker管理。让我们学习如何创建和使用Docker卷:

创建Docker卷

使用docker volume create命令创建新卷,如下所示:

docker volume create my-volume

此命令创建一个名为my-volume的卷,由Docker管理。

将卷附加到容器

要将创建的卷附加到容器,使用以下命令:

docker run -v my-volume:/app/data my-image

这个例子将my-volume挂载到容器的/app/data中。即使容器停止或删除,写入/app/data的任何数据都会保留在my-volume中。

卷使用示例

考虑一个场景,您希望在容器重新启动时存储数据库。您可以使用卷来挂载数据库容器的数据目录:

  1. 创建Docker卷:
    docker volume create db-data
  2. 使用卷运行数据库容器:
    docker run -d --name my-database -v db-data:/var/lib/mysql mysql:5.7

    在这种情况下,/var/lib/mysql目录中的任何数据更改都会存储在db-data卷中。

  3. 数据持久性:

    即使您停止并删除my-database容器,db-data卷依然保持数据完整,准备好附加到另一个实例中。

调试和故障排除绑定挂载问题

设置绑定挂载可能很简单,但也可能存在问题。这里有一些常见问题及其解决方案:

结论和最佳实践

主机与Docker容器之间的文件夹共享是一项重要的功能,可以促进开发、数据持久性和协作。决定使用哪种类型的挂载(绑定挂载或卷)对于您的用例是合适的重要性。绑定挂载为您提供了直接的路径控制,而Docker卷在长期数据持久性方面更具便携性且易于管理。

以下是一些最佳实践:

拥有这些见解、方法和示例,您应该能够有效地处理主机和Docker容器之间的文件夹共享。随意进一步探索并根据项目需要修改这些方法。

如果你发现文章内容有误, 您可以


评论