【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



相关推荐
此生只爱蛋25 分钟前
【Linux】正/反向代理
linux·运维·服务器
qq_54702617931 分钟前
Linux 基础
linux·运维·arm开发
废春啊44 分钟前
前端工程化
运维·服务器·前端
我只会发热1 小时前
Ubuntu 20.04.6 根目录扩容(图文详解)
linux·运维·ubuntu
爱潜水的小L1 小时前
自学嵌入式day34,ipc进程间通信
linux·运维·服务器
zhuzewennamoamtf1 小时前
Linux I2C设备驱动
linux·运维·服务器
TSAI1 小时前
Docker Swarm 集群部署 Eureka 服务注册中心:高可用微服务架构的基石
spring cloud·docker
不惑_1 小时前
Windows 安装 Docker 和 Docker Compose 完整教程
windows·docker·容器
梅尔文.古2 小时前
RaspberryPi-如何启用看门狗
linux·运维·服务器
木子欢儿2 小时前
Ubuntu 24 安装 fcitx5 + rime + 雾凇配置
linux·运维·服务器·ubuntu