📂 数据卷
数据卷 是 Docker 的核心组件,用于持久化容器数据。它有几个重要的特性:
- 🔄 可以在多个容器之间共享和重用
- ✅ 对其的任何修改都会立即生效
- 🚫 数据卷的更新不会影响镜像
- 📌 默认情况下,即使容器被删除,数据卷仍会存在
🛈 注意: 数据卷的使用与 Linux 下对目录或文件进行 mount 非常相似。
📝 常用命令
- 创建数据卷:
$ docker volume create my-vol
- 查看所有的数据卷:
$ docker volume ls
- 查看指定数据卷的信息:
$ docker volume inspect my-vol
- 启动一个挂载数据卷的容器:
$ docker run -d -P \
--name web \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine
- 查看数据卷的具体信息(在 “Mounts” Key 下面):
$ docker inspect web
- 删除数据卷:
$ docker volume rm my-vol
🚮 清理无主的数据卷(这可能会释放大量空间):
$ docker volume prune
☁️ 挂载主机目录
挂载主机目录作为数据卷是 Docker 的常用功能,使容器能够访问宿主机的文件系统。以下是详细的操作方法。
1️⃣ 挂载一个主机目录作为数据卷:
你可以使用 --mount
标记来指定从本地主机挂载目录到容器中:
$ docker run -d -P \
--name web \
--mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \
nginx:alpine
这里,我们将主机的 /src/webapp
目录挂载到了容器的 /usr/share/nginx/html
目录。
⚠️ 注意: 使用 --mount
时,如果本地目录不存在,Docker 会报错。
2️⃣ 指定挂载为只读:
你可以将挂载的目录设置为只读,防止容器修改宿主机的文件:
$ docker run -d -P \
--name web \
--mount type=bind,source=/src/webapp,target=/usr/share/nginx/html,readonly \
nginx:alpine
这样,尝试在容器内创建文件会遇到错误。
3️⃣ 查看挂载的数据卷信息:
你可以使用以下命令查看容器的挂载信息:
$ docker inspect web
这将显示关于容器的详细信息,包括挂载的目录。
4️⃣ 挂载一个本地主机文件作为数据卷:
你不仅可以挂载目录,还可以挂载单个文件:
$ docker run --rm -it \
--mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history \
ubuntu:18.04 \
bash
这样,你可以在容器中查看或编辑宿主机上的文件。