文章目录
- 安装docker
- 配置docker 阿里镜像加速
- 阿里云容器镜像服务ACR
- 配置镜像源
- 安装部署MySQL
- 拉取MySQL镜像
- 创建挂载文件
- 测试部署
- 部署MySQL
- 进入容器将它的mysql配置同步给宿主机
- 删除test1测试容器
- 正式部署MySQL
- 查看正式部署的容器状态
- 配置远程连接
- 字符集以及关闭跳过密码验证等其他配置
- 同步宿主机的cnf文件给容器
- 重启MySQL容器
- 测试远程连接
安装docker
快速部署Docker
配置docker 阿里镜像加速
阿里云容器镜像服务ACR
配置镜像源
在上方选择自己的系统版本,我使用的CentOS 然后将下面
执行命令逐一复制到你的服务器上面运行即可
安装部署MySQL
拉取MySQL镜像
我这里使用的是mysql:8.0.21版本,如果有版本要求,就按照你自己的版本要求
docker pull mysql:8.0.21
查看一下镜像包
docker images
创建挂载文件
在docker中宿主和容器之间可以通过挂载文件夹或者文件的形式实现容器和宿主的配置统一
mkdir /docker/mysql/conf
mkdir /docker/mysql/logs
mkdir /docker/mysql/data
测试部署
这里为啥叫测试部署,就是我们先启动一个测试,主要是我们需要MySQL的一些配置文件,与其我们自己从网站瞎吉儿找,还不如用它自己,改吧改吧就OK了
部署MySQL
docker run -p 3306:3306 --name test1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.21
进入容器将它的mysql配置同步给宿主机
# 前面是容器的目录
# 后面是宿主机的目录(也就是上面创建挂载目录)
docker cp test1:/etc/mysql /docker/mysql/conf
# 拷贝完成后,我们看一下
cd /dockers/mysql/conf/mysql/conf.d
这个.cnf 文件就是我们需要的,MySQL很多配置都是在这里配置的
删除test1测试容器
目的已经达到了,这个test1容器已经不需要了
# 先停止容器
docker stop test1
# 再删除容器,主意执行顺序
docker rm test1
正式部署MySQL
执行命令
docker run -itd -p 13306:3306 --name MySQL13306 -e character-set-server=utf8mb4 --privileged=true --restart unless-stopped -v /dockers/mysql/conf/mysql:/etc/mysql -v /dockers/mysql/logs:/logs -v /dockers/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.21 --lower_case_table_names=1
命令解释
- -p 13306:3306 将容器的3306端口映射到宿主机端口13306
- –name 容器的名称,我这里叫MySQL13306 ,这个可以自定义
- –privileged=true 挂载文件权限设置
- –restart unless-stopped 设置 开机后自动重启容器
- -v /dockers/mysql/conf/mysql:/etc/mysql 挂载配置文件
- -v /dockers/mysql/logs:/logs \ 挂载日志
- -v /dockers/mysql/data:/var/lib/mysql \ 挂载数据文件 持久化到主机,
- -v /etc/localtime:/etc/localtime 容器时间与宿主机同步
- -e MYSQL_ROOT_PASSWORD=123456 设置密码
- -d mysql:8.0.21 启动的镜像(这里注意一定要和pull下来的版本是一致的)
查看正式部署的容器状态
docker ps -a
配置远程连接
你也可以使用root连接,但是不推荐
# 进入容器
docker exec -it MySQL13306 /bin/bash
# 登录MySQL,密码就是你启动容器里面设置的密码
mysql -uroot -p
# 切换到mysql库下面
use mysql;
# 创建远程连接用户
CREATE USER 'remote_user_1'@'%' IDENTIFIED BY 'Changeme_123';
# 对远程用户进行授权
GRANT ALL ON *.* TO 'remote_user_1'@'%';
# 刷新权限
FLUSH PRIVILEGES;
# 退出mysql 控制台
exit;
# 退出容器
ctrl+P+Q
字符集以及关闭跳过密码验证等其他配置
注意这里是你的宿主机服务器了,不是容器里面了
vim /dockers/mysql/conf/mysql/conf.d/mysql.cnf
将如下内容复制到到这个cnf文件中,注意[mysql]这个先删除后覆盖替换
文件上面的注释内容你可以不用看了,看了还要百度翻译贼麻烦
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 跳过密码登录
# #skip-grant-tables
# #bind-address = 127.0.0.1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
lower_case_table_names=1
同步宿主机的cnf文件给容器
docker cp /dockers/mysql/conf/mysql/conf.d/mysql.cnf MySQL13306 :/etc/mysql/conf.d
重启MySQL容器
docker restart MySQL13306
测试远程连接
打完收工!!!