## volume
![](https://img.kancloud.cn/ce/35/ce35d7d7b67786a2c0a1136735c501ac_1020x517.png)
## docker持久化方案
![](https://img.kancloud.cn/0a/8e/0a8e214e2d04e2086b2aa6f6a4aa114b_833x389.png)
> 我们研究第一种
![](https://img.kancloud.cn/0a/ca/0acaa90d8ffa8fadea90678aeb1a2ae9_758x300.png)
## Data Volume 持久化方式1
* 使用mysql镜像启动一个容器。
```
docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
```
> -v 是设置volume ,名字是mysql,存储位置是/var/lib/mysql ,这个存储位置是mysql
镜像里面dockerfile规定的,不可以修改。
> -e 是什么一个环境变量,让mysql能无密码启动。
* 可以查看本机的volume
```
[root@VM_0_11_centos ~]# sudo docker volume ls
DRIVER VOLUME NAME
local cbb4a46f4530dd9cf05975bc5b8535459168758215ae9a5e909846f2137de2ec
local d3ce5752140025e47778de31ec32c9bec2c5438a83cd26c5d8eb9b607d0cdd5c
local mysql
```
* 进入容器,再进入mysql命令行,新建一个数据库。
```
[root@VM_0_11_centos ~]# docker exec -it mysql1 /bin/bash
root@0a3e0fcc2b8a:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.17 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| docker |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
```
* 退出后强制删除正在运行的容器。
```
[root@VM_0_11_centos ~]# docker rm -f mysql1
mysql1
```
* 重新建一个mysql2容器,volume还使用之前的。
```
docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
```
* 然后进入容器,进入mysql,会发现新建的名为docker的数据库依旧存在。
## Binding Mounting 持久化方式2 (这个牛逼啊!!)
> 其实就是宿主机的文件夹和容器内文件夹做的映射。
* 用dockerfile创建一个有nginx 的image
```
FROM nginx:latest
WORKDIR /usr/share/nginx/html
COPY index.html index.html
```
```
docker build -t bizzbee/nginx-bizzbee .
```
* 启动容器 映射端口
```
docker run -d -v $(pwd):/usr/share/nginx/html -p 8887:80 --name web bizzbee/nginx-bizzbee
```
> -v 是把当前目录映射到容器中nginx根目录。
* 这样这两个目录就完全同步了。我们可以在当前目录修改,容器里也会修改。
![](https://img.kancloud.cn/aa/de/aade94ea2e3081fcaeacc0920fadc1a7_480x151.png)