💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 1. docker数据持久化的几种方式 > 数据持久化:数据不随着容器的结束而消失。需要将数据映射到宿主机中的文件当中去。实现数据目录映射有以下三种方式。 ## 1.1 `volume: -v relative-path(宿主机):absolute-path(容器)` **-v: 指定宿主机的相对路径(基于宿主机的/var/lib/docker/volumes目录)映射到容器目录** > **1.如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载**,例如: ``` docker run -d --name=nginx-volume2 -p 8802:80 -v /usr/share/nginx/html nginx ``` ![](https://img.kancloud.cn/aa/7a/aa7ad9829563d4b161434abda2e3596f_1336x249.png) ``` [root@bogon html]# ls /var/lib/docker/volumes/386bf552a60df639a728e40230da5d1ea8595f0806ed625da3cf333c9982f669/_data 50x.html index.html ``` > 2. 使用卷 ``` docker pull nginx ``` ``` docker run -d --name=nginx-volume1 -p 8801:80 -v volume:/usr/share/nginx/html nginx ``` ![](https://img.kancloud.cn/e2/22/e222ac1f0c1405e0705ba23f718d9776_726x233.png) 如下会把容器的内容映射到主机 [root@bogon html]# ls /var/lib/docker/volumes/volume/_data 50x.html index.html **docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。** ## 1.2 bind mounts 意为着可以存储在宿主机系统的**任意位置**,而不是相对docker默认的相对路径;(**比较常用的方式**)但是,bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。 **容器中的数据参考主机目录,主机有什么数据容器就有什么**,与卷挂载正好相反 ~~~ docker run -d --name=nginx-volume -p 8800:80 -v /data/html:/usr/share/nginx/html nginx ~~~ ![](https://img.kancloud.cn/b2/43/b2431eb42a5b8a91adab1054d1324a02_1158x209.png) **vim index.html在主机目录中添加一个index.html** ![](https://img.kancloud.cn/61/06/61063626bd72bde525d33b137ecdb937_1096x338.png) ![](https://img.kancloud.cn/af/11/af11c2d0b958e2aa52b785ade722af0e_712x350.png) 此时修改主机的文件就会影响容器 ## 1.3 tmpfs > 挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(**一般都不会用的方式**)