前言
最近折腾docker,今天安装mysql的时候遇到很多坑,网上找了很多帖子,都没解决,最后看到菜鸟教程里面教程,最终一次就成功安装,我将自己的操作步骤详细记录了下来,希望大家可以少走点弯路。
1、打开cmd,拉取mysql镜像,默认拉取最新版(least)–>mysql 8.0,也可以到docker hub 查找合适的版本
docker pull mysql
2、查看已安装镜像
docker images
3、运行mysql 容器,设置固定IP,这步很关键,必须按下面脚本格式运行,否则后面会出现很多莫名奇妙的问题
PS:这里如果出现3306端口被占用,请参照docker 启动mysql 容器出错 解决
# windows 容器
docker run -itd --name mysql --network mynet --ip 172.18.103.34 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
# 或者挂载目录
docker run -itd --name mysql --network nat --ip 172.18.103.33 -p 3306:3306 -v D:/workspace/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
# linux容器
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
语法说明
docker run -itd --name [容器名称] --network [自定义网络模式] --ip [指定的固定IP地址] -p [宿主机端口]:[容器端口] -v [宿主主机路径]:[容器data store路径] -e MYSQL_ROOT_PASSWORD=[初始密码] [镜像名称/id]
参数说明
--network [自定义网络模式] --ip [指定的固定IP地址]
:设置容器固定ip。-p 3306:3306
:映射宿主机的 3306 端口到容器服务的 3306 端口,外部主机可以直接通过宿主机ip:3306
访问到 MySQL 的服务。MYSQL_ROOT_PASSWORD=123456
:设置 MySQL 服务 root 用户的初始密码。-v D:/workspace/docker/mysql/data:/var/lib/mysql
:将D:/workspace/docker/mysql/data
路径(该路径必须存在)挂载到容器的data store路径(/var/lib/mysql
)下
4、查看是否安装成功
# 查看所有镜像,包括未运行的
docker ps -a
# 查看运行中的镜像
docker ps
或者直接在客户端上查看
5、进入容器
docker exec -it mysql bash
语法说明
docker exec -it [容器名称/id] bash
或者从客户端i进入
6、登录数据库,密码是在创建容器的时候设置的123456
mysql -u root -p
# 或者
mysql -h localhost -u root -p
7、修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';
语法说明
ALTER USER 'root'@'localhost' IDENTIFIED BY '[新密码]';
8、添加远程客户端登录用户
CREATE USER 'TestUser'@'%' IDENTIFIED WITH mysql_native_password BY 'newPassword';
GRANT ALL PRIVILEGES ON *.* TO 'TestUser'@'%';
语法说明
CREATE USER '[远程登录名]'@'%' IDENTIFIED WITH mysql_native_password BY '[数据库密码]';
GRANT ALL PRIVILEGES ON *.* TO '[远程登录名]'@'%';
9、打开cmd,查看容器信息,可以找到ip
docker inspect mysql
语法说明
docker inspect [容器名称/id]
“NetworkSettings”对象的"Networks"对象下找到"IPAddress"即为容器的ip
注意"Gateway"是虚拟机的ip
10、远程客户端登录docker容器中的mysql
注意:登录windows容器的mysql时,需要用容器的ip,登录linux容器的mysql,需要使用宿主机ip,因为linux容器默认网络是bridge
登陆成功
补充
由于忘了将容器设置为自动重启(开机自启)了,所以在这update容器
docker update --restart=always mysql
语法说明
docker update --restart=always [容器名称/id]