铭万做的网站怎么样,农村自建房设计图app,商业网站模板制作与开发,陕西省咸阳市建设银行网站在容器中共享本地文件
目录
卷与绑定挂载的对比在主机和容器之间共享文件Docker 访问主机文件的文件权限试一试 运行一个容器使用绑定挂载在 Docker Dashboard 中访问文件停止容器 额外资源下一步 每个容器都有一切需要运行的资源#xff0c;而不依赖于主机机器上预先安装的…在容器中共享本地文件
目录
卷与绑定挂载的对比在主机和容器之间共享文件Docker 访问主机文件的文件权限试一试 运行一个容器使用绑定挂载在 Docker Dashboard 中访问文件停止容器 额外资源下一步 每个容器都有一切需要运行的资源而不依赖于主机机器上预先安装的任何依赖项。由于容器在隔离环境中运行它们对主机和其他容器的影响最小。这种隔离有一个主要好处容器将与主机系统和其他容器的冲突降到最低。然而这种隔离也意味着容器默认无法直接访问主机上的数据。 想象一个场景你有一个需要访问存储在主机系统上的配置文件的 web 应用程序容器。这个文件可能包含数据库凭据或 API 密钥等敏感数据。将这些敏感信息直接存储在容器镜像中会带来安全风险特别是在镜像共享时。为了解决这个问题Docker 提供了桥接容器隔离和主机数据的存储选项。 Docker 提供了两种主要的存储选项来持久化数据并在主机和容器之间共享文件卷和绑定挂载。
卷与绑定挂载的对比
如果你想确保容器内部生成或修改的数据即使在容器停止运行后仍然存在你应该选择使用卷。详见“持久化容器数据”章节了解更多关于卷及其使用场景的信息。
如果你有特定的文件或目录在主机系统上并且希望直接与容器共享例如配置文件或开发代码那么你应该使用绑定挂载。这就像在主机和容器之间开了一个直接的通道来共享文件。绑定挂载非常适合在开发环境中需要实时文件访问和共享的场景。
在主机和容器之间共享文件
docker run 命令使用的 -v或 --volume和 --mount 标志都可以让你在本地计算机主机和 Docker 容器之间共享文件或目录。然而它们在行为和使用上有一些关键区别。
-v 标志更简单更方便用于基本的卷或绑定挂载操作。如果使用 -v 或 --volume 时主机位置不存在则会自动创建一个目录。
想象你是一个开发人员正在进行一个项目。你在开发机上有一个存放代码的源目录。当你编译或构建代码时生成的工件编译后的代码、可执行文件、镜像等会保存在源目录内的一个单独的子目录中。在以下示例中这个子目录是 /HOST/PATH。现在你希望这些构建工件能够在运行应用程序的 Docker 容器中访问到。此外你希望容器能自动访问每次重建代码时的最新构建工件。
以下是使用绑定挂载启动容器并将其映射到容器文件位置的方法。
docker run -v /HOST/PATH:/CONTAINER/PATH -it nginx--mount 标志提供了更高级的功能和更细粒度的控制使其适用于复杂的挂载场景或生产部署。如果使用 --mount 绑定挂载一个文件或目录该文件或目录在 Docker 主机上还不存在则 docker run 命令不会自动为你创建它而是会生成一个错误。
docker run --mount typebind,source/HOST/PATH,target/CONTAINER/PATH,readonly nginx注意Docker 推荐使用 --mount 语法而不是 -v它提供了更好的控制挂载过程并避免了可能出现的目录缺失问题。
Docker 访问主机文件的文件权限
使用绑定挂载时确保 Docker 有必要的权限访问主机目录是至关重要的。为了授予读/写访问权限可以在容器创建期间使用 -v 或 --mount 标志的 :ro只读或 :rw读写标志。例如以下命令授予读写访问权限。
docker run -v HOST-DIRECTORY:/CONTAINER-DIRECTORY:rw nginx只读绑定挂载允许容器访问主机上的挂载文件进行读取但不能更改或删除文件。使用读写绑定挂载容器可以修改或删除挂载文件这些更改或删除也会反映在主机系统上。只读绑定挂载确保主机上的文件不会被容器意外修改或删除。
同步文件共享
随着代码库的增大像绑定挂载这样的传统文件共享方法可能会变得低效或缓慢特别是在开发环境中需要频繁访问文件时。同步文件共享通过利用同步文件系统缓存来提高绑定挂载性能。这种优化确保了主机和虚拟机VM之间的文件访问快速高效。
试一试
在本实践指南中你将练习如何创建和使用绑定挂载在主机和容器之间共享文件。
运行一个容器
下载并安装 Docker Desktop。
使用以下命令启动一个 httpd 镜像的容器
docker run -d -p 8080:80 --name my_site httpd:2.4这将在后台启动 httpd 服务并将网页发布到主机的 8080 端口。
打开浏览器并访问 http://localhost:8080 或使用 curl 命令验证其是否正常工作。
curl localhost:8080使用绑定挂载
通过使用绑定挂载你可以将主机计算机上的配置文件映射到容器内的特定位置。在此示例中你将看到如何使用绑定挂载来更改网页的外观和感觉
使用 Docker Dashboard 删除现有的容器
创建一个名为 public_html 的新目录在主机系统上。
mkdir public_html切换到 public_html 目录并创建一个名为 index.html 的文件内容如下。这是一个基本的 HTML 文档创建了一个欢迎你并带有友好鲸鱼的简单网页。
!DOCTYPE html
html langen
head
meta charsetUTF-8
title My Website with a Whale Docker!/title
/head
body
h1Whalecome!!/h1
pLook! Theres a friendly whale greeting you!/p
pre iddocker-art## .## ## ## ## ## ## ## ## /\___/
{ / -
\______ O __/\ \ __/\____\_______/Hello from Docker!
/pre
/body
/html现在是运行容器的时候了。--mount 和 -v 示例产生相同的结果。你不能同时运行它们除非在运行第一个容器后删除 my_site 容器。
使用 -v
docker run -d --name my_site -p 8080:80 -v .:/usr/local/apache2/htdocs/ httpd:2.4提示在 Windows PowerShell 中使用 -v 或 --mount 标志时需要提供目录的绝对路径而不仅仅是 ./。这是因为 PowerShell 处理相对路径的方式不同于在 Mac 和 Linux 环境中常用的 bash。
一切运行正常后你应该能够通过 http://localhost:8080 访问网站并看到一个友好的鲸鱼欢迎你。
在 Docker Dashboard 中访问文件
通过选择容器的 Files 选项卡并在 /usr/local/apache2/htdocs/ 目录中选择一个文件可以查看容器内挂载的文件。然后选择 Open file editor。
删除主机上的文件并验证容器中的文件也被删除。你会发现文件在 Docker Dashboard 的 Files 下不再存在。
在主机系统上重新创建 HTML 文件并看到文件重新出现在 Docker Dashboard 的 Containers 下的 Files 选项卡中。此时你也能够访问网站。
停止容器
容器会一直运行直到你停止它。
进入 Docker Dashboard 的 Containers 视图。
找到你想停止的容器。
在 Actions 列中选择 Delete 操作。