Docker – MySQL 设置



MySQL 是一款开源的关系型DBMS,用于高效地存储、管理和检索数据。由于其可靠性、性能和灵活性,它被广泛采用。

另一方面,Docker 是一种容器化平台,允许在容器中构建、交付和运行应用程序。它提供了一个统一且一致的环境来托管应用程序,无需任何麻烦,从而简化了开发、测试和实施过程。

通过利用MySQL和 Docker,我们可以实现隔离且可重用的数据库环境。这使得我们可以 −

  • 可移植性 − 轻松地在各种环境(如开发、测试和生产)之间移动您的数据库。
  • 效率 − 能够在需要时快速启动和停止数据库实例。
  • 隔离性 − 由于运行它们的容器相互分离,因此可以防止由于依赖项冲突而导致的不同数据库版本或应用程序之间的冲突。
  • 可扩展性 − 通过轻松运行多个容器来扩展您的数据库。

Docker 化 MySQL 数据库的先决条件

在学习如何将 MySQL Docker 化之前,请确保具备以下条件 −

  • Docker 设置 − 您应该在您的系统上安装并运行 Docker。要进行验证,您可以在终端中运行 docker --version。
  • Docker 的基本理解 − 了解 Docker 概念(如镜像、容器和命令)将有所帮助。
  • MySQL 知识 − 了解 MySQL 语法和数据库管理将有所帮助。

在下一节中,我们将了解如何从 Docker Hub 拉取官方的 MySQL Docker 镜像。

从 DockerHub 拉取 MySql Docker 镜像

要运行 MySQL 容器,我们需要获取 MySQL Docker 基础镜像。Docker Hub 是一个公共的容器镜像注册中心。我们可以从 DockerHub 拉取官方的 MySQL 镜像。

为此,您可以打开终端并运行以下命令 −

$ docker pull mysql
Docker Setting MySQL 1

这会将最新版本的官方 MySQL Docker 镜像下载到您的本地机器。您可以使用以下命令列出所有镜像以验证拉取操作。

$ docker images
Docker Setting MySQL 2

您可以在以上输出中看到 mysql 镜像已列出。

现在您已经有了可用的 MySQL 镜像,让我们在下一步中创建并运行一个 MySQL 容器。

使用 MySQL 镜像运行 Mysql Docker 容器

Docker 容器是 Docker 镜像的实例。让我们创建一个并启动一个 MySQL 容器。

要运行 MySQL 容器,您可以使用以下命令 −

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=your_strong_password -d mysql
Docker Setting MySQL 3

让我们分解一下该命令 −

  • docker run − 该命令的这一部分将提示 Docker 创建一个新容器。
  • --name my-mysql − 此选项将为容器分配一个名称。
  • -e MYSQL_ROOT_PASSWORD=your_strong_password − 此标志将设置 MySQL 实例的 root 密码。您可以将 your_strong_password 替换为您选择的强密码。
  • -d − 此选项将在分离模式下运行容器,以便它在后台运行。
  • mysql − 这是用于创建容器的 MySQL 镜像。

当您成功执行该命令时,您将看到一个容器 ID 打印到终端。这表明 MySQL 容器已启动并正在运行。您可以使用以下命令列出所有容器以进行验证。

$ docker container ls
Docker Setting MySQL 4

在容器内运行 MySql 服务器

默认情况下,当 Docker 容器启动时,MySQL 服务器会自动启动。我们在前一个命令中使用的 -d 标志确保了容器在分离模式下运行。

您的 MySQL 服务器现在正在 Docker 容器内运行,并且与您的主机系统完全隔离。

如果您想验证 MySQL 服务器是否正在运行,您可以检查容器日志 −

docker logs my-mysql
Docker Setting MySQL 5

您可以在输出中看到 MySQL 启动消息。

您还可以访问容器的 bash 以运行 MySQL 命令。

$ docker exec -it my-mysql /bin/bash
$ mysql -uroot -p -A

它将提示您输入密码。

Docker Setting MySQL 6

您可以看到,现在您可以访问容器内的 MySQL 终端。在下一步中,让我们尝试在这个 MySQL 实例中创建一个数据库和表。

创建数据库和表

让我们使用相同的 MySQL 命令行客户端在 MySQL 容器内创建一个数据库。

CREATE DATABASE mydatabase;
Docker Setting MySQL 7

接下来,让我们在 mydatabase 数据库中创建一个名为 users 的表 −

USE mydatabase;

CREATE TABLE users (
   id INT AUTO_INCREMENT PRIMARY KEY,
   name VARCHAR(50),
   email VARCHAR(100)
);

这将在数据库内创建一个具有以下三个列的表 −

  • id − 自增整数主键。
  • name − 用于存储名称的 varchar 列。
  • email − 用于存储电子邮件地址的 varchar 列。
Docker Setting MySQL 8

让我们使用 INSERT INTO 语句将一行插入 users 表中。

INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

我们可以使用 SELECT 语句查看 users 表中的所有行,

SELECT * FROM users;

这将显示 users 表中的所有列和行。

Docker Setting MySQL 9

现在您已成功在 Docker 化的 MySQL 实例中创建了一个数据库和一个表。在下一节中,让我们了解如何从容器外部访问此 MySQL 实例。

从容器外部访问 MySQL 实例

如果我们想从容器外部访问 MySQL 实例,则必须将 MySQL 端口 (3306) 暴露给主机。我们可以在运行 Docker 容器时使用 -p 标志来实现。

修改 docker run 命令如下 −

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=your_strong_password -p 3306:3306 -d mysql

这会将容器的 3306 端口映射到主机的 3306 端口。然后,您可以使用 MySQL 客户端(如命令行客户端或基于 GUI 的工具)从主机连接到 MySQL 实例。

使用 MySQL 命令行客户端

$ mysql -u root -p -h localhost -P 3306 mydatabase

如果您是从远程机器连接,则应将 localhost 替换为主机的实际 IP 地址。

结论

在本章中,您学习了如何将 MySQL 数据库 Docker 化,从而使其变得可移植、高效和隔离。现在,您可以使用相同的工具和方法管理数据库,同时获得容器化的优势。

务必遵循安全实践,例如使用强密码、限制访问和定期备份。有了这些措施,您就可以开始使用 Docker 部署 MySQL。

如何 Docker 化 MySQL 的常见问题

1. 如何将 Node.js 应用程序连接到 Docker 化的 MySQL 数据库?

您可以使用 Node.js 的 MySQL 驱动程序将 Node.js 应用程序连接到 Docker 化的 MySQL 数据库。使用正确的 hostname(通常为 mysql)和正确的端口配置连接字符串。确保 Node.js 应用程序和 MySQL 容器位于同一网络中。

2. 如何处理 Docker 容器中 MySQL 的数据持久性?

您可以为该数据创建卷来持久化 MySQL 数据。这会在您的主机目录之一和容器内的目录之间建立映射。写入 MySQL 数据库的任何内容都将保存在主机的卷上。

3. 如何保护 Docker 化的 MySQL 数据库?

为 MySQL 的 root 用户和其他用户使用强密码。尽可能减少针对运行 MySQL 的容器的网络暴露。

定期更新 MySQL 的镜像,并在您的设置中应用安全补丁。考虑使用 SSL/TLS 加密通信。在 MySQL 本身中建立访问控制和用户管理。

广告