已编辑 2 几个月前 通过 ExtremeHow 编辑团队
Docker 桌面文件夹文件共享主机容器配置开发与运维软件开发云计算虚拟化
翻译更新 2 几个月前
Docker是一种强大的工具,用于在容器内开发和部署应用程序。容器是一个隔离的环境,应用程序可以在其中运行,而不受同一台机器上其他进程的干扰。使用Docker时,您可能会遇到需要在主机和Docker容器之间共享文件或文件夹的情况。本指南将详细而全面地向您展示如何在主机和Docker容器之间共享文件夹的过程。我们将介绍基本概念,举例说明,并探讨潜在的挑战。
在进入共享文件夹的步骤之前,理解Docker如何处理数据持久性是很重要的。Docker容器是临时的;一旦关闭,它们中存储的任何数据可能会丢失。Docker提供了各种机制来管理和持久化数据,其中一种主要方式是通过卷。Docker卷是一种持久的数据存储,容器可以访问它,并且它存在于容器生命周期之外。
Docker独立管理卷,这意味着它们与任何特定的容器隔离。这极大地有助于数据持久性,因为即使删除容器,其卷内的数据依然保持完整,可以附加到另一个容器中。卷在主机和Docker容器之间共享文件夹时非常理想,因为它们的生命周期独立于容器,并且可以被显式控制。
Docker支持不同类型的卷以满足不同的用例:
通过绑定挂载在主机与Docker容器之间共享文件夹是最简单的方法。以下是涉及的步骤和一个示例:
在您的主机系统上创建一个要与Docker共享的目录。例如,您可以创建一个名为/Users/username/shared
的目录。
接下来,更新Docker运行命令以包含绑定挂载。在路径映射后使用-v
或--volume
标志。例如,要将/Users/username/shared
挂载到容器中的/shared
,命令是:
docker run -v /Users/username/shared:/shared my-image
在这个例子中,my-image
是您运行的Docker镜像。挂载允许在容器内对/shared
的任何更改在主机的/Users/username/shared
文件夹中反映出来。
一旦容器通过绑定挂载运行,任何在容器内/shared
的文件更改会直接影响主机/Users/username/shared
目录中的文件,反之亦然。
这里是一个使用Nginx网络服务器在主机和Docker容器之间共享文件的实际示例。假设您想要服务位于主机上的一个目录中的HTML文件:
website
的目录。website
目录中添加一个带有内容的index.html
文件。使用以下命令将website
目录从/usr/share/nginx/html
目录绑定到容器中:
docker run --name my-nginx -v "$PWD"/website:/usr/share/nginx/html:ro -d nginx
:ro
选项使绑定挂载在容器内是只读的。
在网页浏览器中访问http://localhost
以查看由Nginx从主机上的共享目录提供的index.html
文件。
尽管绑定挂载直接与主机文件系统的路径相关,但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
中。
考虑一个场景,您希望在容器重新启动时存储数据库。您可以使用卷来挂载数据库容器的数据目录:
docker volume create db-data
docker run -d --name my-database -v db-data:/var/lib/mysql mysql:5.7
在这种情况下,/var/lib/mysql
目录中的任何数据更改都会存储在db-data
卷中。
即使您停止并删除my-database
容器,db-data
卷依然保持数据完整,准备好附加到另一个实例中。
设置绑定挂载可能很简单,但也可能存在问题。这里有一些常见问题及其解决方案:
确保容器具有访问绑定挂载目录的必要权限很重要,否则您可能会遇到权限被拒绝
错误。
仔细检查在-v
参数中提供的主机路径和容器路径,以确保它们正确无误。
Docker守护程序可能以与主机用户不同的用户身份运行,这可能会影响访问权限。您可以尝试以更高权限运行Docker,或根据需要调整用户权限。
主机与Docker容器之间的文件夹共享是一项重要的功能,可以促进开发、数据持久性和协作。决定使用哪种类型的挂载(绑定挂载或卷)对于您的用例是合适的重要性。绑定挂载为您提供了直接的路径控制,而Docker卷在长期数据持久性方面更具便携性且易于管理。
以下是一些最佳实践:
拥有这些见解、方法和示例,您应该能够有效地处理主机和Docker容器之间的文件夹共享。随意进一步探索并根据项目需要修改这些方法。
如果你发现文章内容有误, 您可以