引言

由于目前很多博主介绍了docker安装部署mysql8,但是其中会遇到一些问题,对于新手来说也算比较坎坷,在此,本人更新一篇文章手把手教你怎么使用docker部署mysql8.0+,希望能减少读者在开发过程中遇到的问题。

一、准备工作

已安装Docker

二、下载mysql8.0docker镜像

docker pull mysql:8.0

三、查看下载的docker镜像

我这里下载了两个版本
在这里插入图片描述

四、创建挂载目录

mkdir -p /data/mysql/conf
mkdir -p /data/mysql/data
mkdir -p /data/mysql/logs

五、创建my.cnf文件,放在 /data/mysql/conf 目录中,注意配置文件中的端口号、字符集、时区

vi /data/mysql/conf/my.cnf

复制如下内容到my.cnf:

[client]
port = 3308
default-character-set = utf8mb4

[mysql]
port = 3308
default-character-set = utf8mb4

[mysqld]
# bind-address = 0.0.0.0
# port = 3306

max_connections=10000

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 设置时区和字符集
# default-time-zone='+8:00'
character-set-client-handshake=FALSE
init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'

gtid-mode=ON
enforce-gtid-consistency = ON

六、启动镜像

6.1 启动命令

–lower_case_table_names=1 :忽略大小写

docker run  --restart=always  --name mysql3309.8.0.18  -v /data/mysql3309/conf:/etc/mysql  -v /data/mysql3309/data:/var/lib/mysql  -v /data/mysql3309/log:/var/log  -v /data/mysql3309/mysql-files:/var/lib/mysql-files -p 3309:3306  -e MYSQL_ROOT_PASSWORD='123456'   -d mysql:8.0.18 --lower_case_table_names=1

6.2 命令分析

docker run: 启动一个新的Docker容器。

--restart=always: 设置容器的重启策略。这里指定为always,意味着无论容器退出的原因是什么(包括手动停止),Docker都会自动重启该容器。

--name mysql3309.8.0.18: 为新创建的容器指定名称为mysql3309.8.0.18,便于管理和识别。

-v /data/mysql3309/conf:/etc/mysql: 使用数据卷(volume)挂载。将主机目录/data/mysql3309/conf挂载到容器内的/etc/mysql目录,用于存放MySQL的配置文件。这样,对主机目录的更改将反映在容器内,便于自定义配置。

-v /data/mysql3309/data:/var/lib/mysql: 将主机目录/data/mysql3309/data挂载到容器内的/var/lib/mysql目录,用于存放MySQL的数据文件。这样,即使容器停止或重新创建,数据库数据也能得以保留。

-v /data/mysql3309/log:/var/log: 将主机目录/data/mysql3309/log挂载到容器内的/var/log目录,用于存放MySQL的日志文件。这样,可以在主机上直接查看和管理日志。

-v /data/mysql3309/mysql-files:/var/lib/mysql-files: 将主机目录/data/mysql3309/mysql-files挂载到容器内的/var/lib/mysql-files目录,这是MySQL用来存储上传的文件(如LOAD DATA INFILE操作)的特殊目录。

-p 3309:3306: 端口映射。将主机的3309端口映射到容器内的3306端口,使得外部可以通过主机的3309端口访问到容器内的MySQL服务。

-e MYSQL_ROOT_PASSWORD='123456': 设置环境变量。这里设置了MySQL的root用户密码为123456。Docker镜像会在初始化时读取这个环境变量来设置MySQL的root密码。

-d mysql:8.0.18: 以守护(detached)模式运行容器,并指定使用的镜像为mysql:8.0.18。这意味着容器将在后台运行,并且不会将输出附加到当前终端。

--lower_case_table_names=1: 传递给容器内MySQL服务的启动参数。这里设置了lower_case_table_names参数为1,表示在MySQL中将所有表名转换为小写,不论创建时使用何种大小写。这对于在不区分大小写的文件系统(如某些Linux系统)上运行MySQL,并希望在不同大小写敏感的环境中保持表名一致性非常有用。

七、解决无法登录mysql问题

本人用DBeaver链接刚创建的mysql8,报错如下:
在这里插入图片描述
IP、端口/用户名、密码都没有问题,在docker里面登录没有问题:
在这里插入图片描述
原来如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥;可以在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是 AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启。
只需要修改如下位置,将false改为true即可访问:
在这里插入图片描述

八、拉取 Nacos Docker 镜像

8.1拉取 Nacos 镜像:

docker pull nacos/nacos-server

以上是 Docker Hub 上拉取最新的 Nacos 镜像。如果你希望拉取特定版本,可以指定版本号,例如:

docker pull nacos/nacos-server:v2.1.2

8.2运行 Nacos 容器

你可以使用以下命令启动 Nacos 容器。这里我们将以 standalone 模式启动 Nacos:

docker run -d \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -p 8848:8848 \
  --name nacos \
  --restart=always \
  nacos/nacos-server:v2.1.2

命令解释:
-d:后台运行容器。
-e MODE=standalone:设置 Nacos 运行模式为单机模式(standalone)。
-e PREFER_HOST_MODE=hostname:设置 Nacos 偏好使用主机名。
-p 8848:8848:将 Nacos 容器的端口 8848 映射到主机的端口 8848。
–name nacos:给容器命名为 nacos。
–restart=always:重启docker时,自动启动相关容器。
nacos/nacos-server:2.0.3:指定使用的镜像和版本。

8.3访问 Nacos 控制台

http://<your-server-ip>:8848/nacos

默认的登录用户名和密码是:

用户名:nacos
密码:nacos

8.4查看容器日志

docker logs nacos

8.5配置持久化(可选)

docker run -d \
  -e MODE=standalone \
  -e PREFER_HOST_MODE=hostname \
  -p 8848:8848 \
  -v /path/to/your/local/data:/home/nacos/data \
  --name nacos \
  --restart=always \
  nacos/nacos-server:2.0.3

在这个命令中,/path/to/your/local/data 是你宿主机上用于存储数据的目录。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐