1.绑定挂载的Volume:真实去存储数据,可以指定Volume位置(数据持久化)
2.bind mouting,指定一个共享目录(数据共享)
方案一:
案例:volume方案持久化数据
1.创建并启动mysql,密码设置为空
docker run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql
2.查看所有的volume
docker volume ls
3.查看volume详细信息,可以找到具体目录
docker volume
docker volume inspect 060e1122454dae61d0ed7c6c8b2a07a1bd3746108e31e2d67e85656e8e36ddcf
4.停止并删除了mysql容器
docker stop mysql
docker rm mysql
5.再次查看目录,数据持久化成功
cd /var/lib/docker/volumes/
ls
6.volume默认存储名字不太好看
7.删除不被引用的volume (危险,通常情况下不会去删除)
docker volume prune
8.创建容器,将容器中/var/lib/mysql目录下所有数据持久化
docker run -d -v mysql:/var/lib/mysql --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql
9.进入目录,查看数据
10.交互运行容器,进入mysql
11.创建database,退出mysql和容器
12.停止并删除mysql
docker stop mysql
docker rm mysql
13.创建一个新的mysql容器,使用之前的volume进行数据恢复
docker run -d -v mysql:/var/lib/mysql --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql
14.交互运行mysql,查看到数据已经恢复
方案二:bind mouting方案持久化数据
指定一个与容器同步的目录,容器或者目录变化,变化的内容都会同步
案例:
1.创建并进入一个目录
cd /home/nginx
2.编辑一个文件
3.编写Dockerfile
# 从远程仓库拉取nginx镜像
FROM nginx:latest
# 设置进入运行容器的目录
WORKDIR /usr/share/nginx/html
# 将文件拷贝至容器中命名为index.html
COPY index.html index.html
4.构建image
docker build -t nginx .
5.使用image启动容器
docker run -d -p 80:80 --name web nginx
6.目前还没有实现共享目录
7.删除容器并重新创建,开启并实现共享目录
docker run -d -v /home/nginx/:/usr/share/nginx/html -p 80:80 --name web nginx
8.在容器里创建test.txt
9.本地修改文件,容器内文件内容也更改了