Docker - 配置 MariaDB



MariaDB 是一款開源資料庫,具有強大的效能和可擴充套件的企業級安全功能,通常用於關係型資料庫管理系統 (RDBMS)。它在開發 Web 應用程式和處理資料倉庫應用程式方面很受歡迎。

在 Docker 容器內執行 MariaDB 提供了幾個優勢:它確保了一致的環境,使部署變得容易,並且與其他服務隔離。將 MariaDB 容器化簡化了設定,使開發人員能夠輕鬆管理和擴充套件資料庫環境。

將 MariaDB 容器化的先決條件

在開始將 MariaDB 容器化之前,我們確保滿足以下要求:

  • Docker 基礎知識 - 瞭解 Docker 的基本概念,例如映象、容器和基本 Docker 命令。
  • 在本地機器上安裝 Docker - 確保 Docker 已安裝在您的本地機器上。它可以從 https://www.docker.com 下載並安裝。
  • MariaDB 知識 - 對 MariaDB 以及如何配置和使用 MariaDB 的一些瞭解可以幫助您設定資料庫並使用它。
  • 文字編輯器或 IDE - 您將需要一個文字編輯器或整合開發環境 (IDE),例如 VS Code 或 Sublime Text。
  • CLI 訪問許可權 - 命令列或終端訪問許可權,允許您執行 Docker 命令。

設定 MariaDB 專案

第一步是建立一個專案結構,其中包含與我們的 MariaDB 例項相關的所有檔案。這包括 Dockerfile、配置檔案和專案所需的任何其他資源。

步驟 1:建立專案目錄

讓我們建立一個新目錄,它將作為所有專案檔案的根目錄。

$ mkdir docker-mariadb
$ cd docker-mariadb
Setting up a MariaDB Project

步驟 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', 'alice@example.com'),

('Bob Johnson', 'bob@example.com'),

('Charlie Brown', 'charlie@example.com');	

此指令碼自動建立一個名為 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
Install MariaDB Locally

安裝完成後,我們可以啟動 MariaDB 服務:

sudo systemctl start mariadb

對於 macOS

brew services start mariadb

步驟 2:保護 MariaDB 安裝

MariaDB 還提供了一個安全指令碼,允許您透過刪除匿名使用者、停用遠端 root 登入和其他安全設定來增強預設安裝。您可以執行以下命令來保護您的 MariaDB 安裝:

$ sudo mysql_secure_installation

您可以按照終端中的提示根據您的要求配置安全設定。

Secure MariaDB Installation

步驟 3:建立和測試資料庫

現在,讓我們手動執行之前準備的 SQL 指令碼以建立資料庫、表和插入資料。

訪問 MariaDB Shell

$ sudo mysql -u root -p
Access the MariaDB Shell

執行 SQL 指令碼

現在我們位於 MariaDB shell 中,我們可以透過執行以下命令執行我們的指令碼:

SOURCE /path/to/init-scripts/init-db.sql;

我們需要將 /path/to/ 替換為您 init-db.sql 檔案的實際路徑。

Execute the SQL Script

驗證資料庫和資料

現在我們可以驗證資料庫和表是否已建立,以及資料是否已正確插入:

USE my_database;
SELECT * FROM users;
Verify the Database and Data

步驟 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 所在的目錄。

Build the Docker Image

步驟 2:驗證映象

讓我們透過列出機器中的所有映象來驗證映象是否已建立。

$ docker images

您可以看到我們的 my-mariadb-image 已列出。

Verify the Image

執行 MariaDB Docker 容器

現在我們的映象已構建,讓我們建立與此映象關聯的 Docker 容器。

步驟 1:執行容器

要從我們的 Docker 映象啟動容器,我們可以使用以下命令:

$ docker run -d --name my-mariadb-container -p 3306:3306 my-mariadb-image
Run the Container

這將在分離模式下(-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;
Connect to the MariaDB Container

您可以看到資料庫、表和行已經存在,這是透過我們建立的指令碼的自動執行建立的。

結論

將 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 中實施訪問控制和使用者管理。

廣告