- Docker 教程
- Docker - 首页
- Docker - 概述
- Docker - 在 Linux 上安装
- Docker - 安装
- Docker - Hub
- Docker - 镜像
- Docker - 容器
- Docker - 注册表
- Docker - Compose
- Docker - 使用容器
- Docker - 架构
- Docker - 层
- Docker - 容器和主机
- Docker - 配置
- Docker - 容器和 Shell
- Docker - Dockerfile
- Docker - 构建文件
- Docker - 公共仓库
- Docker - 管理端口
- Docker - Web 服务器
- Docker - 命令
- Docker - 容器链接
- Docker - 数据存储
- Docker - 卷
- Docker - 网络
- Docker - 安全
- Docker - 工具箱
- Docker - 云
- Docker - 构建云
- Docker - 日志记录
- Docker - 持续集成
- Docker - Kubernetes 架构
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 托管
- Docker - 最佳实践
- Docker 设置服务
- Docker - 设置 Node.js
- Docker - 设置 MongoDB
- Docker - 设置 NGINX
- Docker - 设置 ASP.Net
- Docker - 设置 MySQL
- Docker - 设置 Go
- Docker - 设置 Rust
- Docker - 设置 Apache
- Docker - 配置 MariaDB
- Docker - 设置 Jupyter
- Docker - 设置 Portainer
- Docker - 设置 Rstudio
- Docker - 设置 Plex
- Docker 设置 - Flame
- Docker 设置 - PostgreSql
- Docker 设置 - Mosquitto
- Docker 设置 - Grafana
- Docker 设置 - Nextcloud
- Docker 设置 - Pawns
- Docker 设置 - Ubuntu
- Docker 设置 - RabbitMQ
- Docker - 设置 Python
- Docker - 设置 Java
- Docker - 设置 Redis
- Docker - 设置 Alpine
- Docker - 设置 BusyBox
- Docker 设置 - Traefik
- Docker 设置 - WordPress
- Docker 有用资源
- Docker - 快速指南
- Docker - 有用资源
- Docker - 讨论
Docker - 配置 MariaDB
MariaDB 是一款开源数据库,具有强大的性能和可扩展的企业级安全功能,通常用于关系型数据库管理系统 (RDBMS)。它在开发 Web 应用程序和处理数据仓库应用程序方面很受欢迎。
在 Docker 容器内运行 MariaDB 提供了几个优势:它确保了一致的环境,使部署变得容易,并且与其他服务隔离。将 MariaDB 容器化简化了设置,使开发人员能够轻松管理和扩展数据库环境。
将 MariaDB 容器化的先决条件
在开始将 MariaDB 容器化之前,我们确保满足以下要求:
- Docker 基础知识 - 了解 Docker 的基本概念,例如镜像、容器和基本 Docker 命令。
- 在本地机器上安装 Docker - 确保 Docker 已安装在您的本地机器上。它可以从 https://www.docker.net.cn 下载并安装。
- MariaDB 知识 - 对 MariaDB 以及如何配置和使用 MariaDB 的一些了解可以帮助您设置数据库并使用它。
- 文本编辑器或 IDE - 您将需要一个文本编辑器或集成开发环境 (IDE),例如 VS Code 或 Sublime Text。
- CLI 访问权限 - 命令行或终端访问权限,允许您执行 Docker 命令。
设置 MariaDB 项目
第一步是创建一个项目结构,其中包含与我们的 MariaDB 实例相关的所有文件。这包括 Dockerfile、配置文件和项目所需的任何其他资源。
步骤 1:创建项目目录
让我们创建一个新目录,它将作为所有项目文件的根目录。
$ mkdir docker-mariadb $ cd docker-mariadb
步骤 2:初始化项目
您还可以使用 Git 等版本控制系统初始化项目,它可以帮助跟踪更改并与其他人协作。
$ git init
步骤 3:创建 MariaDB 配置文件
我们可以通过配置文件自定义 MariaDB 实例。这包括自定义设置,例如设置特定用户权限、数据库选项或网络设置。
创建配置文件
$ touch my-mariadb.cnf
编辑配置文件
在您的文本编辑器中打开此文件,并添加以下配置设置。例如:
[mysqld] bind-address = 0.0.0.0 port = 3306
稍后,我们将此配置文件挂载到 Docker 容器中,这将允许 MariaDB 读取这些设置。
步骤 4:准备 SQL 脚本
让我们创建一个 SQL 脚本,以使用特定的模式和数据初始化我们的数据库。此脚本将在 MariaDB 容器启动时执行。
为 SQL 脚本创建目录
$ mkdir init-scripts
创建并添加 SQL 脚本
现在,让我们在 init-scripts 目录中创建一个名为 init-db.sql 的文件,并将以下 SQL 脚本粘贴到其中
-- Create a new database CREATE DATABASE IF NOT EXISTS my_database; -- Switch to the new database USE my_database; -- Create a new table CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Insert some sample data into the table INSERT INTO users (name, email) VALUES ('Alice Smith', '[email protected]'), ('Bob Johnson', '[email protected]'), ('Charlie Brown', '[email protected]');
此脚本自动创建一个名为 my_database 的数据库,然后创建一个具有某些基本字段的 users 表,并插入一些示例数据。
步骤 5:查看项目结构
我们的项目目录应该如下所示:
docker-mariadb/ ├── init-scripts/ │ └── init-db.sql └── my-mariadb.cnf
在本地运行 MariaDB
在为我们的 MariaDB 应用程序创建 Docker 容器之前,让我们尝试在我们的机器上本地运行它。这将确保我们的设置按预期工作。通过此步骤,我们可以验证我们的 MariaDB 配置和数据库初始化脚本。
步骤 1:在本地安装 MariaDB
让我们首先通过以下步骤在本地机器上安装 MariaDB:
在 Ubuntu/Debian 上
sudo apt update sudo apt install mariadb-server mariadb-client
在 CentOS/RHEL 上
sudo yum install mariadb-server mariadb
在 macOS 上(使用 Homebrew)
brew install mariadb
安装完成后,我们可以启动 MariaDB 服务:
sudo systemctl start mariadb
对于 macOS
brew services start mariadb
步骤 2:保护 MariaDB 安装
MariaDB 还提供了一个安全脚本,允许您通过删除匿名用户、禁用远程 root 登录和其他安全设置来增强默认安装。您可以运行以下命令来保护您的 MariaDB 安装:
$ sudo mysql_secure_installation
您可以按照终端中的提示根据您的要求配置安全设置。
步骤 3:创建和测试数据库
现在,让我们手动执行之前准备的 SQL 脚本以创建数据库、表和插入数据。
访问 MariaDB Shell
$ sudo mysql -u root -p
执行 SQL 脚本
现在我们位于 MariaDB shell 中,我们可以通过运行以下命令执行我们的脚本:
SOURCE /path/to/init-scripts/init-db.sql;
我们需要将 /path/to/ 替换为您 init-db.sql 文件的实际路径。
验证数据库和数据
现在我们可以验证数据库和表是否已创建,以及数据是否已正确插入:
USE my_database; SELECT * FROM users;
步骤 4:停止 MariaDB
现在我们已经验证了我们的数据库设置在本地正常工作,我们可以停止 MariaDB 服务:
$ sudo systemctl stop mariadb
对于 macOS
$ brew services stop mariadb
创建 Dockerfile
Dockerfile 包含创建 Docker 镜像的所有指令,该镜像将包含 MariaDB 实例。在项目的根目录中创建一个名为 Dockerfile 的文件。以下是我们 MariaDB 项目的 Dockerfile 示例:
# Use the official MariaDB image as the base image FROM mariadb:latest # Set environment variables for MariaDB root password and database name ENV MARIADB_ROOT_PASSWORD=root_password ENV MARIADB_DATABASE=my_database # Copy the custom MariaDB configuration file into the container COPY my-mariadb.cnf /etc/mysql/conf.d/ # Copy initialization SQL scripts into the Docker container COPY init-scripts/ /docker-entrypoint-initdb.d/ # Expose the default MariaDB port EXPOSE 3306 # Run the MariaDB server CMD ["mysqld"]
Dockerfile 指令说明
- FROM mariadb:latest - 此指令指定将使用 Docker 镜像创建的 Docker 容器的基础镜像。我们将使用 mariadb:latest 镜像,它是 Docker Hub 提供的官方 MariaDB 镜像。
- ENV MARIADB_ROOT_PASSWORD=root_password - 用于设置环境变量 MARIADB_ROOT_PASSWORD,该变量将由 MariaDB 镜像用于配置 root 用户的密码。
- ENV MARIADB_DATABASE=my_database - 接下来,我们将设置另一个环境变量 MARIADB_DATABASE,它将在初始化容器时自动创建一个新数据库。
- COPY my-mariadb.cnf /etc/mysql/conf.d/ - COPY 指令将自定义 MariaDB 配置文件 (my-mariadb.cnf) 从我们的本地项目目录复制到 Docker 容器内的相应配置目录 (/etc/mysql/conf.d/)。
- COPY init-scripts/ /docker-entrypoint-initdb.d/ - 另一个 COPY 指令将我们的 SQL 脚本从 init-scripts 目录复制到容器内的 /docker-entrypoint-initdb.d/ 目录。MariaDB 将在容器的初始启动期间自动执行这些脚本。
- EXPOSE 3306 - 我们可以使用 EXPOSE 指令公开端口 3306,这是 MariaDB 侦听的默认端口。这将允许我们从容器外部连接到容器中运行的 MariaDB 服务器。
- CMD ["mysqld"] - 最后,这定义了在启动容器时启动 MariaDB 服务器的命令。
构建 MariaDB 镜像
现在我们的 Dockerfile 已创建,下一步是构建 Docker 镜像。
步骤 1:构建 Docker 镜像
让我们导航到项目的根目录(我们的 Dockerfile 所在的位置),并运行以下命令:
$ docker build -t my-mariadb-image .
这将根据 Dockerfile 创建我们的 mariadb 镜像,并将其标记为 my-mariadb-image。末尾的点指定构建上下文,即 Dockerfile 所在的目录。
步骤 2:验证镜像
让我们通过列出机器中的所有镜像来验证镜像是否已创建。
$ docker images
您可以看到我们的 my-mariadb-image 已列出。
运行 MariaDB Docker 容器
现在我们的镜像已构建,让我们创建与此镜像关联的 Docker 容器。
步骤 1:运行容器
要从我们的 Docker 镜像启动容器,我们可以使用以下命令:
$ docker run -d --name my-mariadb-container -p 3306:3306 my-mariadb-image
这将在分离模式下(-d 标志)启动一个容器,将容器的公开端口 3306 映射到本地机器的端口 3306(-p 标志),使用末尾提到的 my-mariadb-image 创建一个名为 my-mariadb-container 的容器(--name)。
步骤 2:连接到 MariaDB 容器
您可以使用 MySQL 客户端连接到 Docker 容器内的 MariaDB 服务器。例如,要从终端使用 MySQL 客户端连接,请运行:
mysql -h 127.0.0.1 -P 3306 -u root -p USE my_database; SELECT * FROM users;
您可以看到数据库、表和行已经存在,这是通过我们创建的脚本的自动执行创建的。
结论
将 MariaDB 容器化是一种非常强大且灵活的方式来管理数据库环境,它提供了诸如可移植性、易于部署和环境隔离等强大的功能。
在本章中,我们解释了如何在 MariaDB 中配置项目;特别是,我们介绍了设置 Dockerfile、创建自定义 Docker 镜像以及配置 MariaDB 容器。这不仅简化了开发过程,还将确保能够复制环境,从而简化数据库解决方案的扩展、协作和后续维护。
在 Docker 中设置 MariaDB 的常见问题
在 Docker 中设置 MariaDB 有些非常常见的问题 (FAQ),本节尝试简要回答它们。
1. 如何将 Node.js 应用程序连接到 Docker 化的 MariaDB 数据库?
使用任何可用的 MariaDB 的 Node.js 驱动程序将您的 Node.js 应用程序连接到您的 Docker 化 MariaDB 数据库。在您的连接字符串中提及正确的主机名 - 通常是 mariadb - 和端口。确保 Node.js 应用程序和 MariaDB 容器连接到同一个网络。
2. 如何处理 Docker 容器中 MariaDB 的数据持久性?
通过使用数据卷来持久化 MariaDB 数据。此卷将主机上的一个目录映射到容器内部的一个目录。写入 MariaDB 数据库的所有数据都存储在主机卷上,并且在容器停止后不会丢失。
3. 如何保护 Docker 化的 MariaDB 数据库?
为 MariaDB root 身份和其他身份设置强密码。限制网络访问 MariaDB 容器。定期更新镜像并应用安全补丁。考虑开启通信的 SSL/TLS 加密。在 MariaDB 中实施访问控制和用户管理。