1.卸载旧版本docker
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2.安装依赖yum-utils
yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置阿里云镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新yum 软件
yum makecache fast
5.安装docker社区版
yum install docker-ce docker-ce-cli containerd.io7.启动docker
sudo systemctl start docker
8.卸载docker
yum remove docker-ce docker-ce-cli containerd.io
9.设置镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
10. 分别执行下图红色框中的3条sudo命令,设置镜像加速器(选择对应的linux镜像)
10.拉取MySQL镜像
docker pull mysql:8.0
11.查看本地镜像
docker images
12.创建挂载目录
mkdir -p /home/mysql/conf 创建conf文件夹, 存放配置文件
mkdir -p /home/mysql/logs 创建conf文件夹, 存放logs
mkdir -p /home/mysql/mysql 创建mysql文件夹,存放data
touch /home/mysql/my.cnf 创建my.cnf配置文件13.编辑my.cnf文件
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html #[mysqld] #pid-file = /var/run/mysqld/mysqld.pid #socket = /var/run/mysqld/mysqld.sock #datadir = /var/lib/mysql [client] #socket = /usr/mysql/mysqld.sock default-character-set = utf8mb4 [mysqld] #pid-file = /var/run/mysqld/mysqld.pid #socket = /var/run/mysqld/mysqld.sock #datadir = /var/lib/mysql #socket = /usr/mysql/mysqld.sock #pid-file = /usr/mysql/mysqld.pid datadir = /home/mysql/data general_log = 1 general_log_file = /home/mysql/log/access.log log-error = /home/mysql/log/error.log character_set_server = utf8mb4 collation_server = utf8mb4_bin max_connections = 2000 max_user_connections = 1900 max_connect_errors = 100000 max_allowed_packet = 50M lower_case_table_names=1 skip-name-resolve sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION secure-file-priv= NULL # Custom config should go here !includedir /etc/mysql/conf.d/ #log-error = /var/log/mysql/error.log # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
14.启动 mysql 容器
docker run -d -p 3306:3306 --privileged=true -v /home/mysql/conf/my.cnf:/etc/my.cnf -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai --name mysql01 mysql:8.0 --lower-case-table-names=1备注----巨坑1:
1. mysql8.0 修改my.cnf(无效),需要在运行容器命令中添加--lower-case-table-names=1
2.如果该容器已经运行了,再次运行命令中含--lower-case-table-names=1,docker ps 看不到运行的容器。
原因:第一次启动未加设置,默认设置的lower_case_table_names=0,第二次启动使用lower_case_table_names=1与默认的字典值0不一致,接着就拒绝了我的设置。
解决办法:
卸载掉之前装的mysql容器,并且删除挂载数据仓库,(-v /home/mysql/mysql:/var/lib/mysql )清空这个 /home/mysql/mysql 文件夹下的所有文件,再次执行第14项启动mysql容器命令,启动成功。
参数解释:
-p 端口映射
--privileged=true 挂载文件权限拥有真正root权限
--restart unless-stopped 设置 开机后自动重启容器
-v /home/mysql/conf/etc/mysql 挂载配置文件
-v /home/mysql/logs:/logs 挂载日志
-v /home/mysql/data:/var/lib/mysql 挂载数据文件 持久化到主机,
-v /etc/localtime:/etc/localtime 容器时间与宿主机同步
-e MYSQL_ROOT_PASSWORD=123456 设置密码
-e TZ=Asia/Shanghai 设置时区
-d 后台启动,mysql
--lower-case-table-names=1 数据库表名不区分大小写
12.进入mysql,修改加密方式
docker exec -it mysql01 /bin/bash
mysql -uroot -p123456
select host,user,authentication_string,plugin from mysql.user;
#查看root的加密方式为:caching_sha2_password,修改加密方式:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#授权root远程访问
grant all privileges on *.* to 'root'@'%' ;
#刷新库
flush privileges;
13.也可以创建用户:
#创建用户
create user 'test'@'%' identified by '123456';
#给用户所有权限:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
#刷新库
flush privileges;
14.其他容器命令
docker stop mysql(容器id或者名称) 暂停容器
docker rm mysql 删除容器
docker ps 可以查看运行中的容器
docker ps -a 可以查看所有容器,包括运行和停止的容器
navicat 连接成功: