如何用 Docker 安装运行 mysql?
本文是使用 Docker 安装运行 MySQL 的教程。
默认读者已经对 docker 会一些简单操作,比如会查看 container 列表、删除 container 之类的简单管理命令。
Docker 的一些概念
先简单说 Docker 的几个概念:
image:镜像。你可以把它理解为安装包。你要运行 mysql,首先得有一个 image。这里你需要注意软件的版本问题。
container:容器。mysql 通过 image 安装到的一个虚拟容器。Docker 的牛逼之处就是它可以将不同的服务隔离,放到不同容器。这个容器可以当作一个小型的独立的操作系统。容器可以启动、暂停、销毁。通常我们会将容器内部的端口映射到你的原生操作系统的端口上,实现访问。
volumes:数据卷。像是 mysql 里面产生的数据,可以通过 volume 的方式映射到宿主环境中,这样 container 销毁数据还能保留下来。
安装命令
首先安装并启动 Docker,建议下载支持可视化的桌面端。
下面进入正题。
docker run -p 3306:3306 --name app-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- run:构建 container;
- -p <宿主端口>/<container端口>:将 container 指定端口映射到宿主的 127.0.0.1 的特定端口;
- --name <容器名>:指定容器的名字。可以不指定,这时 docker 会给你瞎掰一个名字;
- -e <key>=<value>:设置环境变量,container 会基于这些变量做初始化。这里我设置了 mysql 的 root 账号初始密码;
- -d 后台运行;
- <镜像名称:标签>:基于哪个 image 构建,我这里指定了 mysql,版本为 5.7。不指定版本会下载最新版。这个必须放到末尾。
执行后,docker 会在本地看有没有 mysql:5.7 的 image,如果没有就会下载,然后再基于这个 image 构建出我们的容器实例。
更多 docker run 命令说明请查阅官方文档:
https://docs.docker.com/engine/reference/commandline/run/
如果你用的是 ARM 架构 的计算机(比如 Macbook Pro M1),可能会失败:
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
docker: no matching manifest for linux/arm64/v8 in the manifest list entries.
See 'docker run --help'.
因为某个 image 可能不支持 ARM。最新的几个版本是支持的 ARM,但我这个 5.7 比较古老,就不支持了。


好在 Macbook Pro M1 支持用 x86 转译为 ARM,安装 x86 版本也无所畏惧。所以我们可以加上 --platform linux/amd64来指定平台类型,而不是默认的系统来自动设置,这样就能找到 image。
docker run -p 3306:3306 --name app-mysql --platform linux/amd64 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
然后我们就可以在 container 列表看到这个 app-mysql 成功启动了。

命令工具的查看写法为:
docker container ls

接着就是用 mysql 客户端去通过映射出来的 3306 端口进行连接。
mysql 客户端要自行安装,可以装命令行工具,或者可视化工具,macOS 下我推荐 Sequel Ace。
持久化数据
容器中的生成的数据会保留在 container 中。如果我们销毁了 container,之前创建的表和数据都会丢失。
如果你希望将它们留下来,可以考虑做一个文件系统的映射。你需要加一个 -v 选项。
-v <宿主 volume>:<容器目录>:指定的宿主的目录就会映射到容器目录上,里面的数据在 contaienr 销毁后依旧存在。
docker run -p 3306:3306 --name app-mysql -e MYSQL_ROOT_PASSWORD=123456 -v app-mysql:/var/lib/mysql -d mysql:5.7
这里我们让 container 下的 /var/lib/mysql 目录保存到名为 app-mysql 的 volume 下。可以通过 docker volume ls 命令查看有哪些 volume。
也可以指定宿主环境的一个绝对路径,让文件都保存在这个位置上,这样的话它们不会出现在 volume 列表中。
查看支持版本
再简单说说怎么去查看 docker 支持的 mysql 版本。
我们可以去官网找到 mysql 的页面:
https://hub.docker.com/search?q=mysql
点进去 mysql 就能看到它支持的 tag:

如果你找不到你需要的版本,或者比较特殊,就需要自己做 image 了。
相关推荐
-
PHP8种变量类型的详细讲解2025-02-22 00:32:24
-
php+apache 和 php+nginx的区别2025-02-22 00:21:27
-
PHP:与workerman结合实现定时任务2025-02-22 00:15:57
-
Nginx的Rewrite规则与实例2025-02-22 00:15:39
-
MySql中身份证字段的简单脱敏介绍2025-02-22 00:15:36