1、准备工作。
如果你不想看前面的废话,请直接在右边。目录。跳到。 运行容器。
处。
默认你已经有了 docker 环境。
Windows 推荐 Docker Desktop (下载地址)并基于 WSL2 运行 Docker 环境。
mac 推荐 Orbstack (下载地址)(这是非常节省的资源尤其对于 16GB 内存用户,免费个人用户也支持 K8S,更强大的是,随便创建 Linux 虚拟机数量,不需要安装其他虚拟机软件,然后找到一个 iso 安装镜像文件 Linux 系统)
本人以 mac 环境演示。


放两张简单的图片给大家看。 Orbstack,Docker Desktop 相信很多同学都有。


简单地放两张图片给大家看这张图片 Orbstack,Docker Desktop 我相信很多学生都有。
如果这台虚拟机有另一个克隆功能,建立一个基本环境后,克隆多个设备配置差异化的东西,非常快。
2、正题开始。
- 2.1、寻找镜像。
直接使用。
docker search。

命令搜索 MySQL 的镜像。 假如安装了那个。
mariadb。
其实也是一样的。引用亚马逊云 MySQL 与 MariaDB 区别链接:
- MariaDB 是 MySQL 修改版本。在 MySQL 被 Oracle 公司收购后出于许可和分发问题,MySQL 原始开发团队制作了 MariaDB。自收购以来,MySQL 和 MariaDB 经历了不同的发展。但是,MariaDB 采用 MySQL #xff00的数据和表定义文件c;还使用相同的客户端协议和客户端 API、端口和套接字。这是为了让 MySQL 用户可以轻松切换 MariaDB。

使用 DockerHub 地址查找。 直接使用。
docker pull mysql。
默认会拉出最新的镜像,即: mysql:latest。
2.2、拉取镜像。 废话不多说,我这里以。
docker pull mysql:8.3.0-oracle。
例(不知道用什么镜像推荐直接用 Oracle 可以)docker。
pull mysql:8.3.0-oracle。
2.3、运行容器。
使用下列命令操作 MySQL 容器。docker。 run。-p。3307。 :3306。--name。 mysql8。--restart。= always。--privileged。= true。\。-v。 /Users/lyk/docker-test/mysql/log:/var/log/mysql。\。-v。 /Users/lyk/docker-test/mysql/data:/var/lib/mysql。\。-v。 /Users/lyk/docker-test/mysql/conf:/etc/mysql/conf.d。\。-e。MYSQL_ROOT_PASSWORD。= root。-d。
mysql:8.0.36-oracle。
注意:不要删除后面的 \ 号。
假如你是基础 WSL 的 Docker 环境,您可以将宿主机的目录放入您的真实电脑,也可以放到 WSL Linux 子系统目录(比如 /opt/docker/mysql 这种),然后通过其他终端连接 WSL 修改子系统可以,我个人建议直接映射到我个人 WSL 子系统中的目录去,因为 Windows 跟踪目录结构 Linux 目录映射有时有些容器会出现一些问题。
如果不提前拉镜像,操作容器时,发现没有这个镜像会自动拉下来再操作。
如果不提前拉镜像,操作容器时,如果没有这个镜像,会自动拉下来再操作。 因为我的 3306 端口用完了,所以宿主机我映射到3307。我会随便做一个目录 docker-test测试只是,看需求,把目录放好。
至于您以后的配置文件。 my.cnf。
它被放置在映射中。
**/mysql/conf/。
目录下,my.cnf参考下面给出的示例,根据自己的实际需要进行修改,或者自行搜索相关说明。
my.cnf。
参考:点此跳转。 | 参数说明: | 参数。 |
---|
格式。 | 说明。 | -p。 |
宿主机端口 : 容器端口。 | 映射容器内的端口和宿主机端口,直接访问宿主机的端口可以访问容器。 | –name。 |
–name xxx。 | 给容器起个名字。–restart。 –restart = xxx (可选:no。 (默认值),on-failure。 , | always。 |
)。 | 容器重启策略(例如,操作失败,尝试重新启动;比如每次重启电脑,容器都会自动启动#xff09; –privileged。 –privileged=xxx (可选。 false。 (默认值)、。 | true。 )。 值为。 |
true。 | 时,授予容器内所有过程的特权。 当容器在特权模式下运行时,容器中的过程将有一些特权,例如: 所有设备和文件系统都可以访问主机。 可进行网络配置和管理,包括网络接口和路由表的创建和修改。 -v。 -v。 宿主机目录。 :。 容器内目录。 (此时为目录映射或目录挂载);或者直接: -v。 | 宿主机目录。 (此时是数据卷挂载)。 #xff1a;直接映射容器内的文件和宿主机目录的文件,即:宿主机修改文件,容器中的文件直接生效,例如做。 |
my.cnf。 | 配置文件将其放置在宿主机目录中并映射到容器中,我只需要修改宿主机的文件来完成容器中的文件 MySQL 配置修改。 | -e。 |
-e 参数名=参数值。 | 当容器启动时,在容器中设置一些初始值,例如,上述命令是给予的 MySQL 最初的容器设置 root 用户密码是 root,注意,参数名必须有效,否则,报错不能说 MySQL 本身没有 AAA 你可以自己做这个参数,除了你自己的程序(比如自己跑一些 Spring 当然,Boot程序可以自己设置一些自定义参数) -d。 加上 -d 参数结束后,容器将在后台静静启动,也就是说,信息不会打印在您的终端窗口c;类似跑 Java 程序的。 |
加上 -d 参数结束后,容器将在后台静静启动,也就是说,信息不会打印在您的终端窗口c;类似跑 Java 程序的。

nohup java -jar xxx.jar &

命令。
这里放一张上面提到的目录挂载和数据卷挂载的区别,回答来自 ChatGPT:

以上命令在 shell 运行完窗户后,我们看到我们的容器启动了。 说明:忘记在映射目录中添加用户目录,我把它放在用户目录,大家忽略了上图//docker-test 与 上述命令中提到的 /Users/lyk/docker-test 即可。
成功运行后,容器将显示 id(唯一的标志)


通过。

docker ps。


查看运行中的容器:
2.4、Navicat 连接。
测试连接连通性。
- 2.5、完事。
如果能正常连接,那就没问题了。如果遇到问题参考以下可能出现的问题。
3、可能出现的问题。
如果Navicat报错代码2059,以下修改将进行 %针对所有用户,即:开启。
远程访问。,进入容器。docker。 exec。

-it。 mysql8。
bash。
注意 如果使用alpine类型的镜像,所以命令都是以。sh。结尾(所有 alpine 都是镜像),比如:docker。 exec。
-it。
mysql8。 sh。在容器内执行以下命令(分两种,远程访问是可以允许的 or #xff09本地访问:ALTER。USER。'root' @'%'IDENTIFIED BY。'root' PASSWORD EXPIRE NEVER。;ALTER。USER。'root' @'%'
- IDENTIFIED WITH mysql_native_password BY。
'root'
;假如只允许。
本机。
访问(例如,你只是在本地玩,将此设置为), localhost。只允许本机访问。ALTER。USER。'root' @'localhost'IDENTIFIED BY。'root' PASSWORD EXPIRE NEVER。;ALTER。USER。'root' @'localhost'
IDENTIFIED WITH mysql_native_password BY。
'root';
执行完毕记得刷新权限:
FLUSH PRIVILEGES。;到目前为止,我们的 MySQL 安装完成后。