前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Docker数据卷?

如何使用Docker数据卷?

作者头像
用户1560186
发布2019-11-19 20:39:49
1.5K0
发布2019-11-19 20:39:49
举报
文章被收录于专栏:运维录

开始之前


如果你有一些需要持续更新的数据并且希望持久化数据,或者需要在不同的容器之间共享数据,再者需要主机与容器之间共享数据,那么你可以使用数据卷来满足这些需求。

数据卷定义

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

数据卷可以在容器之间共享和重用。

对数据卷的修改会立马生效。

数据卷默认会一直存在,即使容器被删除。

使用数据卷

数据卷有两种创建方式一是创建容器时创建数据卷,二是先创建好数据卷,然后在创建容器时挂载这个数据卷,两种方式均可以。

1. 创建一个数据卷

代码语言:javascript
复制
docker volume create demo-data
demo-data

2. 创建容器使用-v(--volume)参数来挂载数据卷

代码语言:javascript
复制
docker run --name demo1 -d \
    -v demo-data:/var/www/html nginx:alpine
docker run --name demo2 -d \
    -v demo-data:/var/www/html nginx:alpine

3. 列出数据卷

代码语言:javascript
复制
docker volume ls
DRIVER      VOLUME NAME
local       demo-data

4. 查看数据卷详细信息

代码语言:javascript
复制
docker volume inspect demo-data
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/demo-data/_data",
        "Name": "demo-data",
        "Options": {},
        "Scope": "local"
    }
]

5. 删除数据卷

代码语言:javascript
复制
docker volume rm demo-data
Error response from daemon: remove demo-data: volume is in use - [#省略..]

注意: 由于有容器正在使用数据卷,提示无法删除数据卷。

测试数据卷

1. 宿主机写入数据

代码语言:javascript
复制
hostname > /var/lib/docker/volumes/demo-data/_data/hosts.txt

注意: 这个目录对应创建的 demo-data 数据卷。

2. 容器写入数据

代码语言:javascript
复制
docker exec -ti demo1 sh -c 'hostname >> /var/www/html/hosts.txt'
docker exec -ti demo2 sh -c 'hostname >> /var/www/html/hosts.txt'

3. 读取数据

代码语言:javascript
复制
cat /var/lib/docker/volumes/demo-data/_data/hosts.txt
node0
87c60cbe6147
a6bc3c00c790

4. 删除容器数据卷仍然保留

代码语言:javascript
复制
docker stop demo1
docker stop demo2
docker rm demo1
docker rm demo2

数据卷仍然存在

代码语言:javascript
复制
docker volume ls
DRIVER      VOLUME NAME
local       demo-data

如果需要可以使用 rm 选项删除数据卷

代码语言:javascript
复制
docker volume rm demo-data

数据卷已不存在

代码语言:javascript
复制
docker volume inspect demo-data
[]
Error: No such volume: demo-data
命令帮助

1. 创建容器时挂载数据卷参数

代码语言:javascript
复制
docker run --help | grep '\-v,'
  -v, --volume list     Bind mount a volume

2. 删除容器时一并删除数据卷参数(慎用)

代码语言:javascript
复制
 docker rm --help | grep '\-v'

  -v, --volumes   Remove the volumes associated with the container

3. 数据卷管理命令

代码语言:javascript
复制
docker volume --help

Usage:docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes
小结

最后来总结下文章中的知识点

  • 数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除数据卷 。
  • 如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用docker rm -v这个命令。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据卷定义
  • 使用数据卷
  • 测试数据卷
  • 命令帮助
  • 小结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档