过程记录
先docker pull mysql
,当前最近的版本是8.0,然后docker images
查看一下效果。
然后就是启动一个容器,命令是:docker run --name test-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql
,这句话的意思是:启动一个叫test-mysql的容器, 端口影射是3306到宿主机的3306,同时设置root的密码是123456,然后以守护进程的形式启动。
但是如果在宿主机上使用mysql -h127.0.0.1 -uroot -p123456
可能会报错,报错内容是:Authentication plugin ‘caching_sha2_password’ cannot be loaded:
那么就docker exec -it 容器ID号 env LANG=C.UTF-8 /bin/bash
进入到容器里,使用mysql -uroot -p123456
,看一下在容器里是否可以正常登录,如果可以的话,那么就在mysql的命令行里执行ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
。
退出容器在宿主机上重新连接,这样就OK了。至于原因就是,mysql的客户端是yum安装的,虽然是centos 7,但是安装的版本也是5.5版本的,所以8.0的客户端有一个新的密码加密方式:caching_sha2_password
,客户端不支持,所以需要手动到命令行里更改一下。
mysql存储的坑
先思考一个问题:假如某mysql容器里存储了100G的数据,那么这个容器关闭了,这100G的数据还在么?从宿主机是可以找到这100G的数据么?
docker inspect mysql-container-id
,找到里面的volume字段,这里也显示挂载的host路径,可以通过这个路径来备份数据。或者使用docker cp mysql-container-id:/path/to/db-backup-file ./
,把容器内数据放到当前目录下。如果是生产环境,必须使用Volume或数据容器。
参考资料
http://binary-space.iteye.com/blog/2412769
http://dockone.io/question/108