# 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
> 挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(**一般都不会用的方式**)
- docker
- docker安装
- 数据持久化
- 镜像管理
- Dockerfile
- 镜像的分层
- add copy
- 构建实例
- 镜像的导入导出
- 清理构建空间
- 配置阿里云加速器
- docker网络模型
- 本地仓库
- registry
- harbor
- IDEA部署docker
- 软件安装
- 安装es
- 安装MongoDB
- 安装rabbitmq
- 安装redis
- 安装nacos
- 安装mysql
- Minio
- 镜像中心
- kubernetes
- 1. 安装k8s
- 2.主要组件
- 3.污点
- 4.pod
- 5.控制器
- 6.网络
- 7.探针
- 8.安装Dashbord
- 9.secret
- 9.serviceAccount
- 10.service
- 资源清单
- kube-proxy
- flannel源文件
- 服务升级
- 笔记
- 镜像