5.1 绑定目录(bind mounts)的概念
通过绑定目录(bind mounts)将主机目录挂载到容器中是 Docker 的一个强大功能,它允许容器直接使用主机系统上的文件和目录。这对于开发、测试和配置特别有用,因为在无需将文件复制到容器的情况下就可以使用本地文件。在这节课里,我们会讨论如何使用绑定目录,并提供一些示例和最佳实践。
绑定目录允许将主机系统上的特定目录或文件挂载到容器中。这与由 Docker 管理并存储在专用目录中的 volumes (卷)不同。
使用绑定目录的优势
- 直接访问主机文件:容器可以直接使用和修改主机上的文件。
- 开发便利性:开发人员可以在主机上修改文件,并实时看到这些更改反映在容器中。
- 灵活性:主机上的任何目录都可以挂载到容器中。
挂载绑定目录的命令
绑定目录可以通过运行容器时使用 -v
或 --mount
参数来挂载。
5.2 使用参数-v
的示例
1. 挂载主机目录到容器
挂载主机目录到容器的最简单示例:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
在这个示例中,主机上的目录/path/on/host
被挂载到nginx容器内的目录/path/in/container
。
2. 挂载主机文件到容器
你也可以挂载单个文件:
docker run -d --name my_container -v /path/on/host/config.conf:/etc/nginx/nginx.conf nginx
在这个示例中,主机上的配置文件config.conf
被挂载为容器内的配置文件nginx.conf
。
5.3 使用参数 --mount
的示例
参数 --mount
提供了一种更详细的方式来挂载绑定的目录,并允许指定各种参数。
1. 使用 --mount
挂载目录
docker run -d --name my_container --mount type=bind,source=/path/on/host,target=/path/in/container nginx
这个示例和之前用 -v
的例子类似,但用的是更详细的语法。
2. 挂载为只读模式
docker run -d --name my_container --mount
type=bind,source=/path/on/host,target=/path/in/container,readonly nginx
在这个示例中,目录以只读模式挂载,从而阻止对容器中文件的更改。
5.4 实际例子
为了开发web应用程序,你可以将主机上的源代码目录挂载到容器中。
在主机上创建源代码目录:
mkdir -p ~/my_web_app
echo "你好, 世界!" > ~/my_web_app/index.html
挂载目录启动容器:
docker run -d --name web_dev -v ~/my_web_app:/usr/share/nginx/html nginx
现在对主机中目录 ~/my_web_app 的任何修改都会立即反映到容器中。
示例 2: 使用配置文件
你可以将主机目录中的配置文件挂载到容器中。
在主机上创建配置文件:
echo "user www-data;" > ~/nginx.conf
echo "worker_processes auto;" >> ~/nginx.conf
挂载配置文件启动容器:
docker run -d --name nginx_custom -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
在这个例子中,主机上的Nginx配置文件被用在容器中。
5.5 检查挂载的目录和文件
你可以使用 docker exec 命令检查挂载的目录和文件,在容器内执行命令。
示例
检查目录内容:
docker exec -it my_container ls /path/in/container
检查文件内容:
docker exec -it my_container cat /path/in/container/config.conf
删除绑定的目录
绑定的目录不直接由 Docker 管理,因此它们的删除在主机文件系统级别进行。
示例
在主机上删除绑定目录:
rm -r /path/on/host
GO TO FULL VERSION