【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



相关推荐
RationalDysaniaer29 分钟前
k8s配置与存储
云原生·容器·kubernetes
ybb7046304 小时前
linux第二次作业
linux·运维·服务器
大白同学4215 小时前
【Linux】进程间通信
linux·运维·服务器
..Move...6 小时前
Docker镜像制作
运维·docker·容器
码龄3年 审核中11 小时前
说说SSH的端口转发
大数据·运维·ssh
盛世隐者11 小时前
【Linux】定制Linux系统
linux·运维·服务器
行思理12 小时前
Docker 应该如何学习 分四个阶段
学习·docker·容器
..Move...13 小时前
Docker应用部署tomcat和nginx
nginx·docker·tomcat
Lxt.星翊14 小时前
MySQL(安装和卸载、数据库存储原理图)
linux·运维·windows
苹果醋314 小时前
JAVA面试汇总(二)多线程(五)
运维·vue.js·spring boot·nginx·课程设计