物理机或虚拟机数据持久化存储
Docker容器数据持久化存储
由于Docker容器是由容器镜像生成的,所以一般容器镜像中包含什么文件或目录,在容器启动后,我们依旧可以看到相同的文件或目录。
由于Docker容器属于"用后即焚”型计算资源,因此Docker容器不适合做数据持久化存储
Docker提供三种方式将数据从宿主机挂载到容器中:
docker run -v
volumes
bind mounts
nginx下新建index.html文件,并且定义内容
root@hecs-213321:~/Docker/nginx# ls
index.html
root@hecs-213321:~/Docker/nginx# cat index.html
今天是9月9日
启动容器
-v ./nginx/:/usr/share/nginx/html/:将宿主机中的nginx目录下的文件挂载到容器中的/usr/share/nginx/html/目录下
root@hecs-213321:~/Docker# docker run -d --name web -v ./nginx/:/usr/share/nginx/html/ nginx:latest
查看容器
root@hecs-213321:~/Docker# sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3e2107bf3fc nginx:latest "/docker-entrypoint.…" 58 seconds ago Up 56 seconds 80/tcp web
查看容器的IPAddress
root@hecs-213321:~/Docker/nginx# docker inspect web
访问
root@hecs-213321:~/Docker/nginx# curl http://172.17.0.2
今天是9月9日
把容器删掉
root@hecs-213321:~/Docker/nginx# docker stop web
web
root@hecs-213321:~/Docker/nginx# docker rm web
web
发现宿主机中的文件还在
root@hecs-213321:~/Docker# cd nginx/
root@hecs-213321:~/Docker/nginx# ls
index.html
当重新运行容器时,容器中的/usr/share/nginx/html/目录下还会存在index.html文件
root@hecs-213321:~/Docker/nginx# docker run -d --name web -v ./nginx/:/usr/share/nginx/html/ nginx:latest
7559987e00f184fb96ce136149e864197bbbe5366930f93d85fad6222ba363ab
当在容器中的挂载的文件发生变化,宿主机中挂载的文件也将发生变化。
root@hecs-213321:~/Docker/nginx# sudo docker exec -it web /bin/sh
修改容器中的文件内容
# cd /usr/share/nginx/html
# echo '66666'>index.html
# cat index.html
66666
宿主机中的文件内容也将发生变化
root@hecs-213321:~/Docker/nginx/nginx# cat index.html
66666
同样的,当在宿主机中的挂载的文件发生变化,容器中挂载的文件也将发生变化。
运行容器
root@hecs-213321:~# docker run -d --name web1 -v ./web1root/:/usr/share/nginx/html/ nginx:latest
查看运行中的容器
root@hecs-213321:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f631e440db1 nginx:latest "/docker-entrypoint.…" 31 seconds ago Up 30 seconds 80/tcp web1
7559987e00f1 nginx:latest "/docker-entrypoint.…" 34 minutes ago Up 34 minutes 80/tcp web
查看web1容器的IPAddress
docker inspect web1
访问,报403
curl http://172.17.0.3
原因是该目录下没有文件
root@hecs-213321:~# ls
Docker snap web1root
root@hecs-213321:~# cd web1root/
root@hecs-213321:~/web1root# ls
创建index.html文件,并且新加内容,再次访问即可访问成功
root@hecs-213321:~/web1root# echo 'web1' > index.html
root@hecs-213321:~/web1root# curl http://172.17.0.3
web1
docker volume create nginx-volume
查看数据卷
root@hecs-213321:~# docker volume ls
DRIVER VOLUME NAME
local 9b4315d9adb4ce6677921ea040e3f9180c325230aa8cd8cdfa8fac754318473f
local nginx-volume
查看数据卷详情
root@hecs-213321:~# docker inspect nginx-volume
[
{
"CreatedAt": "2023-09-09T11:45:17+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx-volume/_data",
"Name": "nginx-volume",
"Options": null,
"Scope": "local"
}
]
-- mount
:指定使用自己创建的volume
src=nginx-volume:指定使用那个数据卷
dst:指定挂载到容器中的具体位置
root@hecs-213321:~# docker run -d --name web3 --mount src=nginx-volume,dst=/usr/share/nginx/html/ nginx:latest
231aa656b24d2e189e0f340df7447fcc0db96cbdc530e060fa7bdd52799e1b50
root@hecs-213321:~# ls
查看容器详细信息,并且访问
root@hecs-213321:~# docker inspect web3
并没有报403
上面的操作中创建容器的时候使用 -v 会报403
创建的数据卷,默认存储在/var/lib/docker/volumes/nginx-volume/_data目录下