1.1 卷 (Volumes)
在Docker中存储数据是一项重要任务。容器本身是临时的,这意味着容器内的数据在停止或删除容器后会丢失。为了在多次启动之间保存数据并确保其长期存储,Docker提供了两种主要技术:卷 (volumes) 和绑定目录 (bind mounts)。
卷 (Volumes)
卷是由Docker管理的数据存储资源。它们独立于容器的生命周期存在,可以用于长期存储数据。卷可以被创建和管理,这提供了一种方便的方式来在容器之外存储数据。
使用卷的好处
- 与主机隔离: 卷存储在主机上由Docker管理的专用目录中,确保其隔离性。
- 易于管理: Docker 提供了方便的命令来创建、删除和管理卷。
- 兼容性和可移植性: 卷可以很容易地在不同的主机之间移动,并与不同的容器一起使用。
创建和使用卷的示例
创建卷:
Terminal
docker volume create my_volume
在容器中使用卷:
在这个例子中,卷 my_volume
被挂载到容器 my_container
内的目录 /data
。
Terminal
docker run -d --name my_container -v my_volume:/data nginx
1.2 绑定目录 (Bind Mounts)
绑定目录允许将主机的特定目录挂载到容器中。这让容器能使用主机上的文件和目录,这在开发和测试中尤其有用,当需要处理本地文件时能显得很方便。
使用绑定目录的优势:
- 直接访问主机文件: 容器可直接使用主机上的文件和目录。
- 开发方便: 开发者可以轻松修改主机上的文件,并实时在容器中看到这些变化。
- 灵活性: 绑定目录可以是主机上的任意目录,为数据管理提供了更大的灵活性。
绑定目录的使用示例
启动绑定目录的容器:
Terminal
docker run -d --name my_container -v /path/on/host:/data nginx
在这个示例中,主机上的目录 /path/on/host
被挂载到容器 my_container
内的目录 /data
中。
卷 (Volume) 与绑定目录的对比:
特性 | 卷 | 绑定目录 |
---|---|---|
数据存储 | 由 Docker 管理 | 由用户管理 |
隔离性 | 与主机的文件系统隔离 | 使用主机的文件系统 |
性能 | 针对 Docker 优化 | 依赖主机的文件系统 |
适用场景 | 长期数据存储 | 开发和测试 |
1.3 实践案例
使用的实践例子
例子 1: 使用卷存储数据库
为了保证数据库数据的持久化存储,可以使用卷。
创建卷:
Terminal
docker volume create db_data
使用卷运行数据库容器:
Terminal
docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v
db_data:/var/lib/postgresql/data postgres
例子 2: 为Web开发使用绑定目录
在开发Web应用时,可以使用绑定目录,使得本地文件的更改可以立即反映到容器中。
使用绑定目录运行容器:
Terminal
docker run -d --name web_dev -v $(pwd)/my_website:/usr/share/nginx/html nginx
在这个例子中,当前工作目录 my_website
挂载到容器 nginx
的目录 /usr/share/nginx/html
中。
GO TO FULL VERSION