本指南逐步解释了如何在几分钟内设置在 Docker 容器中运行新的 MySQL 服务器。
Docker 的一大优点是您可以快速使用它来试用应用程序,而无需直接在您的机器上安装它。您可以使用 Docker 在容器中运行数据库,就像它是远程服务器一样,并测试您的应用程序如何与其交互。
使用 Docker 容器运行 MySQL 是一种广泛使用的机制。事实上,MySQL 是与 Docker 容器一起使用的最流行的数据库之一。
要将 MySQL 创建为 Docker 容器,主机应安装 Docker。如果你没有安装它,这里有一个如何在 Ubuntu 上安装 Docker 的分步指南。(见:https://www.linuxmi.com/ubuntu-docker-zhinan.html )
1. 拉取 MySQL Docker 镜像
要在 Docker 中创建和测试 MySQL 服务器,您要做的第一件事是从Docker Hub拉取 MySQL 官方镜像 。
您可以下载特定版本,例如 8.0、5.7、5.6,或选择最新版本,如以下命令所示:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker pull mysql:latest
- [sudo] linuxmi 的密码:
- latest: Pulling from library/mysql
- 72a69066d2fe: Pull complete
- 93619dbc5b36: Pull complete
- 99da31dd6142: Pull complete
- 626033c43d70: Pull complete
- 37d5d7efb64e: Pull complete
- ac563158d721: Pull complete
- d2ba16033dad: Pull complete
- 688ba7d5c01a: Pull complete
- 00e060b6d11d: Pull complete
- 1c04857f594f: Pull complete
- 4d7cfa90e6ea: Pull complete
- e0431212d27d: Pull complete
- Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
- Status: Downloaded newer image for mysql:latest
- docker.io/library/mysql:latest docker pull mysql:latest
如果您需要特定版本的 MySQL,请替换 latest 为版本号。
您可以运行该docker images 命令来查看从 Docker Hub 中提取的 Docker 镜像列表。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker images
- 输出
- REPOSITORY TAG IMAGE ID CREATED SIZE
- mysql latest 3218b38490ce 23 hours ago 516MB
如您所见,MySQL 映像现在可用于我们本地安装的 Docker。
2. 设置 Docker数据卷(Volume)
如您所知,Docker 容器原则上是短暂的,如果容器被删除,任何数据或配置都可能会丢失。然而,Docker Volume提供了一种机制来保存在 Docker 容器内创建的数据。它们是 Docker 用于存储 Docker 容器持久数据的首选机制。
默认情况下,MySQL 将其数据文件存储在该 /var/lib/mysql 目录中。因此,在部署之前,您需要设置一个 Docker Volume来持久化您的数据库。否则,当容器重新启动时,您的数据将丢失。
让我们创建一个新Volume并将其命名为mysql-data。这将用于存储您的所有数据库信息。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker volume create mysql-data
- mysql-data
您可以通过发出以下命令列出 Docker 已知的所有数据卷:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker volume ls
输出
- DRIVER VOLUME NAME
- local mysql-data
如下图:
如您所见,我们新创建的名为 Docker 的数据卷mysql-data在这里并准备好提供数据。然后可以将其附加到新创建的 MySQL 容器。
3. 运行一个 MySQL Docker 容器
现在您的机器上有 MySQL Docker 映像和一个用于保存数据的Volume,您可以部署一个容器。您还必须使用MYSQL_ROOT_PASSWORD环境变量为 MySQL root 用户设置密码。
现在,让我们运行容器:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker run -d --name=mysql-server -p 3306:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=your_password mysql
输出
- 0ef0b05cce690b44da538291781f4885702074d4b63a7a293fe71dcdd3f69695
OK。这将启动最新版本的 MySQL 实例,可以使用指定的 root 密码从任何地方远程访问它。
为了让事情更清楚,让我们分解这个语法。以下是该命令中每个参数的含义:
- -d 将以分离模式运行此容器,以便它在后台运行。
- --name 将名称分配mysql-server给您的容器实例。如果不指定此项,Docker 将生成一个随机名称。
- -p 将 MySQL 容器端口绑定3306到主机上的相同端口。您将能够 使用在您的主机上运行的MySQL 客户端 ( )连接到 127.0.0.1端口。3306mysql
- -v 选项将容器卷 ( /var/lib/mysql)内的数据文件夹绑定到mysql-data您在上一步中创建的本地 Docker 卷 ( )。
- -e 设置环境变量。在这种情况下,MySQL 根密码。
- mysql 是我们用来创建容器的映像的名称。
您可以通过列出正在运行的容器来检查容器是否正在运行:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker ps
输出
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 0ef0b05cce69 mysql "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-server
4. 连接到 MySQL 容器
您可以通过附加到容器并运行mysql命令来获得交互式 MySQL shell 。这提供了完整的 MySQL 命令行界面,因此您可以使用所有熟悉的命令和标志。
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker exec -it mysql-server mysql -u root -p
mysql 如果您的主机上预安装了它,您还可以使用客户端连接 MySQL Docker 实例 。
请注意,默认情况下,当您告诉 mysql 客户端连接到 localhost. 所以一定要使用 127.0.0.1 而不是 localhost。
- linuxmi@linuxmi:~/www.linuxmi.com$ mysql -u root -h 127.0.0.1 -p
当然,您也可以使用基于 GUI 的客户端(例如 MySQL Workbench)来连接数据库。在 MySQL Workbench 中为“Hostname”指定启动 Docker 容器的机器的 IP 地址。
相关:如何使用 MySQL Workbench 在 MySQL 中创建数据库 (见:https://www.linuxmi.com/ubuntu-20-04-mysql-workbench.html )
当然,在上面显示的主机名示例中,您可以使用 MySQL docker 容器所在机器的 IP 地址而不是127.0.0.1. 您可以通过运行ifconfig不带任何参数的命令来找到该地址。
使用机器的 IP 地址可以让您远程访问 MySQL 服务器。
5. 停止、启动和重启 MySQL 容器
此命令将暂时停止正在运行的 MySQL 容器(并且可以稍后恢复/重新启动):
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker stop mysql-server
要启动MySQL 容器,请运行:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker start mysql-server
下面的命令用于重启正在运行的 MySQL 容器:
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker restart mysql-server
结论
如您所见,在 Docker 中运行 MySQL 比在本地安装 MySQL Server 更快、更容易。如果您打算在 Docker 上使用 MySQL 进行测试以外的任何事情,还有很多事情需要考虑。有关更多信息,您可以查看Docker Hub 上的 MySQL 页面和有关该主题的官方 MySQL 手册。
如果您有任何问题或建议,请告诉我。