1、数据卷技术
在了解什么是数据卷技术前,我一直有一个问题,容器与数据似乎是共存亡的,即删除容器,里面的数据也就没有了。而数据卷技术解决了这个问题。用一句话总结就是:容器的持久化和同步操作及容器间的数据共享。
1. 数据卷应用
命令:
docker run -v 主机目录:容器目录
截图:
这样,容器的/home目录就挂载到主机的/home/ceshi下了
使用docker inspect 容器id
命令查看容器的详细信息
注意:挂载后容器和主机的数据是同步的,即改变主机/home/ceshi 容器/home目录也会改变,反之亦然。
2. 匿名挂载与具名挂载
匿名挂载
docker run -v 容器路径
docker volume ls # 查看所有卷
截图:
可以看到,它的名字是一长串字符,表示匿名挂载。
具名挂载
docker run -v 卷名:容器路径
截图:
可以看到,它的名字是我们起的名字,这就是具名挂载。
查看一下具名挂载的卷
docker volume inspect 挂载的卷名
截图:
我们可以看到,它的挂载位置就是在/var/lib/docker/volumes/juming-nginx/_data
一般情况下,我们会使用具名挂载
挂载方式总结:
- -v 容器路径 (匿名挂载)
- -v 卷名:容器内路径 (具名挂载)
- -v /主机路径:容器内路径 (指定路径挂载)
扩展:
#通过 -v 容器内路径:ro rw 改变文件的读写权限
#如
-v 卷名:容器内路径:ro
-v 卷名:容器内路径:rw
2、MySQL实战
1. 拉取镜像
docker pull mysql:5.7
截图:
2. 后台启动
命令
docker run --name mysql02 -p 8004:3306 -v /home/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=xxx -v /home/mysql/data:/var/lib/mysql -d mysql:5.7
解释:
- -v 表示使用数据卷技术,将数据库的配置和数据挂载到主机,这样即使删除容器,数据也还在
- -d 表示后台启动
- -e MYSQL_ROOT_PASSWORD=xxx 表示数据库的密码
- –name 表示容器名字
连接测试:
遇到的问题:ERROR 1130: Host ‘192.168.1.3’ is not allowed to connect to this MySQL server 1。
解决办法:
#进入容器
docker exec -it mysql02 /bin/bash
#启动mysql,如果直接回车可以进去就先进去,然后修改密码;如果回车进不去就输入密码MYSQL_ROOT_PASSWORD=xxx中的xxx
mysql -u root -p
#进去后,授权
use mysql;
update user set host = '%' where user = 'root';
flush privileges;