【Docker】之 数据卷(Data Volumes)

当容器(Container)停止并被删除,则容器中的数据也会随之删除。

那有没有一种独立于容器、提供持久化并能服务于多个容器的东西呢?

Docker 数据卷(Data Volumes)

一、 数据卷


数据卷 : 是一个可供一个或多个容器使用的特殊目录

特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

这里写图片描述




二、 Docker持久化数据的方案


(1)基于本地文件系统的Volume

可以在执行Docker create 或 Docker run时,通过-v参数将主机的目录作为容器的数据卷。

(2)基于plugin 的Volume

支持第三方的存储方案,比如NAS, aws




三、Volume的类型


  • 受管理的data Volume,由docker后台自动创建
  • 绑定挂在的Volume,具体挂载位置可以由用户指定




四、小栗子(数据持久化:Data Volume)


验证 数据卷 独立 于容器,并重用数据卷

1. 创建mysql容器

因为 mysql Dockerfile 中有涉及 volume,so 可以以此为例(详看

创建并运行命名为mysql1的容器, mysql密码设置为空
sudo docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql


2. 查看

sudo docker volume ls
这里写图片描述

sudo docker volume inspect 226d8c5d1f789da85b996cd4f836052cbb65c5cddd6a040897d89943a4bfb3e7
这里写图片描述


3. 删除后
# 先停止运行
sudo docker stop mysql1

# 移除容器
sudo docker rm mysql1

# 查看
sudo docker ps -a

# 查看volume
sudo docker volume ls

这里写图片描述


4. 重用数据卷(重命名volume)

重命名mysql
sudo docker run -d -v mysql:/var/lib/mysql --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
这里写图片描述

验证
sudo docker exec -it mysql /bin/bash
这里写图片描述

创建mysql2并重用 mysql volume
sudo docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
这里写图片描述

之后查看数据库,发现原先创建的dockerMysql还在。




五、大栗子(数据持久化:Bind Mounting)


实时更新容器

本地目录和容器目录进行映射
docker run -v /home/aaa:/root/aaa

当本地目录中文件更改,对应的容器目录中的文件也会更改。

猜你喜欢

转载自blog.csdn.net/fanfan4569/article/details/80705720