1.查找镜像:

  1. docker search mysql

也可以去官网查看镜像tag,选择自己需要的版本,否则会下载最新版本:https://hub.docker.com/_/mysql/

使用Docker安装Mysql并连接 - 图1

2.下载镜像(如上一步,可以指定想要的版本,不指定则为最新版):

命令:
指定版本安装命令 : docker pull mysql:5.7.35
不指定命令,直接安装最新版是这个命令 : docker pull mysql

  1. [root@zjj101 ~]# docker pull mysql:5.7.35
  2. 5.7.35: Pulling from library/mysql
  3. 07aded7c29c6: Pull complete
  4. f68b8cbd22de: Pull complete
  5. 30c1754a28c4: Pull complete
  6. 1b7cb4d6fe05: Pull complete
  7. 79a41dc56b9a: Pull complete
  8. 00a75e3842fb: Pull complete
  9. b36a6919c217: Pull complete
  10. 5e11fe494f45: Pull complete
  11. 9c7de1f889a7: Pull complete
  12. cf6a13d05a76: Pull complete
  13. fc5aa81f393a: Pull complete
  14. Digest: sha256:360c7488c2b5d112804a74cd272d1070d264eef4812d9a9cc6b8ed68c3546189
  15. Status: Downloaded newer image for mysql:5.7.35
  16. docker.io/library/mysql:5.7.35
  17. [root@zjj101 ~]#

3.挂载数据以及配置文件

  1. # 运行mysql命名容器名称为mysql-service并且设置root账号初始密码为root
  2. docker run -d -p 3306:3306 --name mysql-service -e MYSQL_ROOT_PASSWORD="root" mysql
  3. 也可以根据image id去进行更新,44241dbd4d38是容器id
  4. docker run -d -p 3306:3306 --name mysql-service -e MYSQL_ROOT_PASSWORD="root" 44241dbd4d38

进入Docker内部

  1. docker exec -it mysql-service bash

确定Docker内 MySQL 文件相关路径

  1. # 查找Docker内,MySQL配置文件my.cnf的位置
  2. mysql --help | grep my.cnf

image.png

创建本地路径并挂载Docker内数据

  1. # 创建Linux本地文件夹
  2. mkdir -p /root/docker/mysql/conf && mkdir -p /root/docker/mysql/data
  3. # 将测试容器里 MySQL 的配置文件复制到该路径。日后需改配置,直接在挂载路径的配置文件上修改即可  
  4. # mysql-service:/etc/mysql/my.cnf 是docker内部的文件夹
  5. # /root/docker/mysql/conf 是你Linux宿主机的文件夹
  6. docker cp mysql-service:/etc/mysql/my.cnf /root/docker/mysql/conf

4.创建 MySQL 容器并启动

将上面创建的mysql容器删除掉,重新创建一个

44241dbd4d38 是容器的containerid

  1. docker run --name mysql-server \
  2. -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
  3. --mount type=bind,src=/root/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
  4. --mount type=bind,src=/root/docker/mysql/data,dst=/var/lib/mysql \
  5. --restart=on-failure:3 \
  6. -d 44241dbd4d38

如果上面不行试试下面的

  1. # 最后-d 可以跟镜像id
  2. docker run --name mysql-server \
  3. -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
  4. --mount type=bind,src=/root/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
  5. --mount type=bind,src=/root/docker/mysql/data,dst=/var/lib/mysql \
  6. --restart=on-failure:3 \
  7. -d mysql

说明:

  • —name:为容器指定一个名字
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -e:username=”xxx”,设置环境变量
  • —restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次
  • -mount:绑定挂载
  • -d:后台运行容器,并返回容器 id

其它

1.修改远程访问

如果软件连不上数据库的话

进入Docker的MySQL内部容器里面, 输入 mysql —help | grep my.cnf 命令 ,可以查找到my.cnf文件位置

  1. root@dc11a462d290:/# mysql --help | grep my.cnf
  2. order of preference, my.cnf, $MYSQL_TCP_PORT,
  3. /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf


直接修改 my.cnf

添加配置 : bind-address =0.0.0.0

  1. [mysqld]
  2. pid-file = /var/run/mysqld/mysqld.pid
  3. socket = /var/run/mysqld/mysqld.sock
  4. datadir = /var/lib/mysql
  5. secure-file-priv= NULL
  6. bind-address =0.0.0.0
  7. # Custom config should go here
  8. !includedir /etc/mysql/conf.d/

保存重启mysql

2.2059错误

image.png

  1. # 修改加密规则
  2. ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
  3. # 更新密码,一定要做这一步骤,哪怕不修改密码
  4. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
  5. # 刷新配置
  6. FLUSH PRIVILEGES;