本文主要谈谈数据如何持久化保存下来!
数据持久化 volume
在服务环境中,更多的时候我们想要的是将容器的某些数据保存下来,如服务的日志,MySQL 的数据等等。
如果不做其他的配置,在容器删除之后,数据也会随之删除,这显然不符合我们用户的需求。
查看本机的 volume:
docker volume ls
默认情况下应该是空的,如果你的不是,可能是之前运行过 redis 的原因,因为我现在已经删除了所有容器。
这里以一个 MySQL 容器为例,其中涉及到的参数可以参考以下链接:
https://github.com/docker-library/docs/tree/master/mysql
运行 MySQL 容器:
docker container run -d --name mysql-demo -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7
设置 MySQL 登陆不需要密码!
docker container run -d --name mysql-demo -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7
进入容器创建数据库:
docker container exec -it mysql-demo /bin/sh
结果如图:
此时查看 volume 情况:
docker volume ls
结果如图:
在查看容器详情的时候可以看到:
docker container inspect mysql-demo
结果如图:
此时我们删除容器:
docker container rm -f mysql-demo
结果如图:
可以发现容器虽然删除了,但是 volume 保留了下来。
此时我们重新运行一个 MySQL 容器挂载上这个 volume 看看效果:
docker container run -d --name mysql-demo-1 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -v 426303e50c95cf029e4943728f4a5a6d1041620cf52916f52a02b8e008d1df42:/var/lib/mysql mysql:5.7
注意红色部分就是将 volume 挂载到容器的数据目录 /var/lib/mysql。
重新登录容器查看:
发现这个库又回来了!
当然如果你觉得这个名字很奇怪那么你在创建容器的时候就应该制定好:
docker container run -d --name mysql-demo-2 -v mysql-volume-demo:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7
查看 volume:
这样就完成了数据持久化保存下来的工作!
数据持久化 Mount
另外一种数据持久化的方法则是将容器的某个目录挂载到宿主机的某个目录,这样也能实现持久化。
这里以一个 nginx 的容器为例:
# 宿主机创建需要挂载的目录 mkdir /data/html -p # 创建容器 docker container run -d --name nginx-demo -v /data/html:/usr/share/nginx/html -p 8000:80 nginx
此时再在宿主机目录创建 html 文件:
cd /data/html/ vim index.html
内容如下:
<h1>Hello docker</h1>
使用浏览器访问:
这样就实现容器的某个目录挂载到了宿主机本地!此时就算你删除容器,只要下一个 nginx 容器挂载这个目录依然能够继续使用。
来源:https://www.cnblogs.com/Dy1an/p/12366993.html