答案就是:数据卷和数据卷容器
Manage data in Docker | Docker Docs
数据卷就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储。
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:数据卷可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新,不会影响镜像卷会一直存在,直到没有容器使用。
docker run --help | grep volume
# 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 会自动为你创建它。
docker run --name nginx-demo5 -v /test1/docker_volume:/opt/nginx_volume -p 8086:80 -d chengxuyuanshitang/nginx:v3
docker rm -f nginx-demo5
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。
cd /test1/docker_volume/
touch testFile.text
ll
容器目录也有一个?testFile.text。
docker rm -f nginx-demo5
ls /test1/docker_volume/
将宿主机的某个目录,使用容器的方式来表示,然后其他的应用容器将数据保存在这个容器中,达到大批量应用数据同时存储的目的。
数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。
docker create -v /test1/docker_volume:/test1/docker_volume --name nginx-test-volume chengxuyuanshitang/nginx:v3
docker ps -a
docker run --volumes-from nginx-test-volume -d -p 8086:80 --rm --name nginx-demo6 chengxuyuanshitang/nginx:v3
echo "docker-volume-test">testFile.text
cat testFile.text
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
命令来指定同时删除关联的容器。 这可以让用户在容器之间升级和移动数据卷。
# 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
docker exec -it nginx-demo6 /bin/bash
ls /test1/docker_volume/
cd /test1/docker_volume/
rm -rf testFile.text
# 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 /
docker exec -it nginx-demo6 /bin/bash
cd /test1/docker_volume/
ls -a