1.搜索镜像: docker search 镜像名称
docker search mysql;
2.拉取镜像:docker pull 镜像名称 docker pull mysql;
3.创建容器: mysql8是镜像名称 sudo docker run -p 3307:3306 --name mysql8 -v /my/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql8
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的远程登陆密码(如果是在容器中使用root登录的话,那么其密码为空) -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件
映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t
两个参数,创建后就会自动进去容器)。
操作容器MYSQL:
# 容器中操作MySQL 命令
docker exec -it mysql8 /bin/bash
# 登录容器里面的mysql
mysql -u root -p
然后输入密码
外部连接mysql:
注意: 最新的mysql外部连接需要授权
登录到mysql里运行命令:
CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
1.因为是在linux虚拟机上装的docker,查虚拟机的ip地址,用命令ifconfig
然后用navicat连接,主机是linux虚拟机ip,端口是宿主机端口3307,帐号是授权的user和密码
登录成功
注意:又遇到问题
用授权的用户登录是成功了,但是创建数据库报错1044.
因此还是要用root登录,因此对docker容器的mysql对root授权执行以下命令:
1,进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)
GRANT ALL ON *.* TO 'root'@'%'; 此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则 2,更改加密规则 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 3,更新root用户密码 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
4.刷新权限:
flush privileges;
用root连接后就可以创建数据库了。
附上我mysql的版本。



