【docker】数据管理

Docker容器会随时关闭和开启,Docker 容器的数据放哪里呢?

复制代码
答案就是:数据卷和数据卷容器

官网文档

Manage data in Docker | Docker Docs

数据卷(Data Volume)

数据卷就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储。

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:数据卷可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新,不会影响镜像卷会一直存在,直到没有容器使用。

数据卷特性:

  1. 数据卷可以在容器之间共享和重用
  2. 对数据卷的修改会立马生效
  3. 对数据卷的更新,不会影响镜像
  4. 卷会一直存在,直到没有容器使用

数据卷命令列表

复制代码
docker run --help | grep volume
  • -v, --volume list Bind mount a volume
  • --volume-driver string Optional volume driver for the container
  • --volumes-from list Mount volumes from the specified container(s)

建一个数据卷

bash 复制代码
# docker run -d --name [容器名字] -v [宿主机文件]:[容器文件] [镜像名称]


docker run --name nginx-demo5 -v /test1/docker_volume -p 8086:80 -d chengxuyuanshitang/nginx:v3

看下容器内部是否生成 /test1/docker_volume目录

挂载一个主机目录作为数据卷

-v /test1/docker_volume:/opt/nginx_volume

本地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它。

bash 复制代码
docker run --name nginx-demo5 -v /test1/docker_volume:/opt/nginx_volume -p 8086:80 -d chengxuyuanshitang/nginx:v3
删除掉刚才启动的容器 nginx-demo5
bash 复制代码
docker rm -f nginx-demo5
启动容器、进入容器内部
bash 复制代码
docker run --name nginx-demo5 -v /test1/docker_volume:/opt/nginx_volume -p 8086:80 -d chengxuyuanshitang/nginx:v3

docker exec -it nginx-demo5 /bin/bash

cd opt/nginx_volume/

ls -a

在宿主机**/test1/docker_volume**目录创建 testFile.text。

bash 复制代码
cd /test1/docker_volume/

touch testFile.text

ll
再次查看容器目录

容器目录也有一个 testFile.text。

删除容器,查看宿主机的数据是否被删除

bash 复制代码
docker rm -f nginx-demo5

ls /test1/docker_volume/

数据卷容器

将宿主机的某个目录,使用容器的方式来表示,然后其他的应用容器将数据保存在这个容器中,达到大批量应用数据同时存储的目的。

数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

创建数据卷容器

bash 复制代码
docker create -v  /test1/docker_volume:/test1/docker_volume --name nginx-test-volume  chengxuyuanshitang/nginx:v3

挂载数据卷

查看容器
bash 复制代码
docker ps -a
挂在容器
bash 复制代码
docker run --volumes-from  nginx-test-volume -d -p 8086:80 --rm --name nginx-demo6 chengxuyuanshitang/nginx:v3
在宿主机中修改 testFile.text
bash 复制代码
echo "docker-volume-test">testFile.text

cat testFile.text 
进入容器内部、查看文件
bash 复制代码
docker exec -it nginx-demo6 /bin/bash

 ls test1/docker_volume/

 cat test1/docker_volume/testFile.text 

使用 --volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态

如果删除了挂载的容器(nginx-test-volume),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。 这可以让用户在容器之间升级和移动数据卷

数据备份

bash 复制代码
# docker run --rm --volumes-from [数据卷容器id/name] -v [宿主机目录]:[容器目录] [镜像名称] [备份命令]

docker run --rm --volumes-from nginx-test-volume -v /test1/docker_volume:/test1/docker_volume chengxuyuanshitang/nginx:v3 tar zcf /test1/docker_volume/docker_volume.tar.gz /test1/docker_volume

删除容器卷( nginx-test-volume)的数据

bash 复制代码
docker exec -it nginx-demo6 /bin/bash

ls /test1/docker_volume/

cd /test1/docker_volume/

rm -rf testFile.text 

恢复数据

bash 复制代码
# docker run --rm  --volumes-from [数据卷容器id/name] -v [宿主机目录]:[容器目录][镜像名称] [还原备份命令]

docker run --rm --volumes-from nginx-test-volume -v /test1/docker_volume:/test1/docker_volume chengxuyuanshitang/nginx:v3 tar xf /test1/docker_volume/docker_volume.tar.gz -C /

进入容器、查看数据

bash 复制代码
docker exec -it nginx-demo6 /bin/bash

cd /test1/docker_volume/

ls -a



相关推荐
DrugOne1 小时前
Amber24 安装指南:Ubuntu 22.04 + CUDA 12.4 环境
linux·运维·ubuntu·drugone
洋葱圈儿6661 小时前
第八个实验——浮动路由
运维·服务器·网络
荣光波比2 小时前
RabbitMQ高可用集群搭建教程(基于CentOS 7.9 + Erlang 23.2.7 + RabbitMQ 3.8.8)
运维·centos·rabbitmq·erlang
zxsz_com_cn2 小时前
基于AI的设备健康诊断:工业设备智能运维的破局之钥
运维·人工智能
de之梦-御风4 小时前
【Linux】 开启关闭MediaMTX服务
linux·运维·服务器
IT 小阿姨(数据库)5 小时前
PostgreSQL通过pg_basebackup物理备份搭建流复制备库(Streaming Replication Standby)
运维·服务器·数据库·sql·postgresql·centos
旗讯数字6 小时前
企业OCR实战:基于OCR技术实现双节差旅报销单表格解析与文字信息自动化采集
运维·自动化·ocr·表格识别
bst@微胖子6 小时前
Harmony中EventHub实现发布订阅
linux·运维·ubuntu
2501_920047036 小时前
k8s-ingress控制器
云原生·容器·kubernetes
K_i1347 小时前
Docker、容器、虚拟机到底是什么
docker·微服务·云原生·容器·kubernetes