1.查找镜像:
docker search mysql
也可以去官网查看镜像tag,选择自己需要的版本,否则会下载最新版本:https://hub.docker.com/_/mysql/
2.下载镜像(如上一步,可以指定想要的版本,不指定则为最新版):
命令:
指定版本安装命令 : docker pull mysql:5.7.35
不指定命令,直接安装最新版是这个命令 : docker pull mysql
[root@zjj101 ~]# docker pull mysql:5.7.35
5.7.35: Pulling from library/mysql
07aded7c29c6: Pull complete
f68b8cbd22de: Pull complete
30c1754a28c4: Pull complete
1b7cb4d6fe05: Pull complete
79a41dc56b9a: Pull complete
00a75e3842fb: Pull complete
b36a6919c217: Pull complete
5e11fe494f45: Pull complete
9c7de1f889a7: Pull complete
cf6a13d05a76: Pull complete
fc5aa81f393a: Pull complete
Digest: sha256:360c7488c2b5d112804a74cd272d1070d264eef4812d9a9cc6b8ed68c3546189
Status: Downloaded newer image for mysql:5.7.35
docker.io/library/mysql:5.7.35
[root@zjj101 ~]#
3.挂载数据以及配置文件
# 运行mysql命名容器名称为mysql-service并且设置root账号初始密码为root
docker run -d -p 3306:3306 --name mysql-service -e MYSQL_ROOT_PASSWORD="root" mysql
也可以根据image id去进行更新,44241dbd4d38是容器id
docker run -d -p 3306:3306 --name mysql-service -e MYSQL_ROOT_PASSWORD="root" 44241dbd4d38
进入Docker内部
docker exec -it mysql-service bash
确定Docker内 MySQL 文件相关路径
# 查找Docker内,MySQL配置文件my.cnf的位置
mysql --help | grep my.cnf
创建本地路径并挂载Docker内数据
# 创建Linux本地文件夹
mkdir -p /root/docker/mysql/conf && mkdir -p /root/docker/mysql/data
# 将测试容器里 MySQL 的配置文件复制到该路径。日后需改配置,直接在挂载路径的配置文件上修改即可
# mysql-service:/etc/mysql/my.cnf 是docker内部的文件夹
# /root/docker/mysql/conf 是你Linux宿主机的文件夹
docker cp mysql-service:/etc/mysql/my.cnf /root/docker/mysql/conf
4.创建 MySQL 容器并启动
将上面创建的mysql容器删除掉,重新创建一个
44241dbd4d38 是容器的containerid
docker run --name mysql-server \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
--mount type=bind,src=/root/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
--mount type=bind,src=/root/docker/mysql/data,dst=/var/lib/mysql \
--restart=on-failure:3 \
-d 44241dbd4d38
如果上面不行试试下面的
# 最后-d 可以跟镜像id
docker run --name mysql-server \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
--mount type=bind,src=/root/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
--mount type=bind,src=/root/docker/mysql/data,dst=/var/lib/mysql \
--restart=on-failure:3 \
-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文件位置
root@dc11a462d290:/# mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
直接修改 my.cnf
添加配置 : bind-address =0.0.0.0
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
bind-address =0.0.0.0
# Custom config should go here
!includedir /etc/mysql/conf.d/
保存重启mysql
2.2059错误
# 修改加密规则
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
# 更新密码,一定要做这一步骤,哪怕不修改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
# 刷新配置
FLUSH PRIVILEGES;