一、前言
數據庫是現代應用開發中不可或缺的一部分,MySQL和Redis作為兩種廣泛使用的數據庫系統,分別用于關系型數據庫和鍵值存儲。本文旨在通過Docker和Docker Compose的方式,提供一個簡潔明了的一鍵部署方案,確保數據庫服務的穩定運行與持久化存儲。
二、Docker及Docker Compose安裝
2.1 Docker安裝
Docker安裝過程略有不同,根據您的操作系統選擇適合的安裝方式。以下以Ubuntu為例,簡要說明安裝步驟:
-
更新包管理器
sudo apt-get update
-
安裝Docker
sudo apt-get install -y docker.io
-
啟動Docker服務并設置開機自啟
sudo systemctl start docker sudo systemctl enable docker
-
驗證Docker安裝
sudo docker --version
2.2 Docker Compose安裝
Docker Compose的安裝相對簡單,同樣以Ubuntu為例:
-
下載Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
請根據
https://github.com/docker/compose/releases
頁面上的最新版本調整上述命令中的版本號。 -
賦予執行權限
sudo chmod +x /usr/local/bin/docker-compose
-
驗證Docker Compose安裝
docker-compose --version
三、編寫Docker Compose文件
接下來,我們將編寫一個docker-compose.yml
文件來定義MySQL和Redis的服務,以及它們之間的網絡配置和持久化存儲設置。
version: "3"# 聲明一個名為 'network' 的網絡,配置子網和默認網關
networks:network:ipam:driver: defaultconfig:- subnet: '177.7.0.0/16'# 定義MySQL和Redis的持久化存儲卷
volumes:mysql:redis:# 定義服務
services:mysql:image: mysql:8.0.21container_name: gva-mysqlcommand: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_cirestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: 'Aa@6447985' # 設置root用戶密碼MYSQL_DATABASE: 'qmPlus'MYSQL_USER: 'gva'MYSQL_PASSWORD: 'Aa@6447985'healthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "gva", "-pAa@6447985"]interval: 10stimeout: 5sretries: 3volumes:- mysql:/var/lib/mysql # 將MySQL的data目錄掛載到volume上,實現數據持久化- ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初始化腳本networks:network:ipv4_address: 177.7.0.13 # 指定MySQL容器的IP地址redis:image: redis:6.0.6container_name: gva-redisrestart: alwaysports:- '16379:6379'healthcheck:test: ["CMD-SHELL", "redis-cli ping | grep PONG || exit 1"]interval: 10stimeout: 5sretries: 3volumes:- redis:/data # 將Redis的數據目錄掛載到volume上,實現數據持久化networks:network:ipv4_address: 177.7.0.14 # 指定Redis容器的IP地址
3.1 配置解釋
-
networks: 定義了一個名為
network
的自定義網絡,其中設置了子網范圍為177.7.0.0/16
。這樣可以為MySQL和Redis容器分配固定的IP地址,便于管理和維護。 -
volumes: 為MySQL和Redis分別定義了存儲卷
mysql
和redis
,用于保存數據庫文件,防止數據丟失。 -
services: 這里定義了兩個服務,分別是MySQL和Redis。
-
MySQL:
- 使用指定版本的MySQL鏡像。
- 通過
command
字段設置了MySQL的啟動參數,包括字符集和排序規則。 environment
字段設置了MySQL的環境變量,包括初始化數據庫、用戶名、密碼等。healthcheck
字段定義了健康檢查機制,幫助監控MySQL服務的正常運行狀態。volumes
字段將MySQL的data目錄與volume關聯起來,同時掛載了初始化腳本。networks
字段將MySQL容器加入到自定義網絡,并指定了其IP地址。
-
Redis:
- 使用指定版本的Redis鏡像。
healthcheck
字段定義了健康檢查機制,幫助監控Redis服務的正常運行狀態。volumes
字段將Redis的數據目錄與volume關聯起來。networks
字段將Redis容器加入到自定義網絡,并指定了其IP地址。
-
-
init.sql: 這是一個初始化腳本,用于在MySQL啟動時自動創建數據庫
qmPlus
和用戶gva
,并授予相應的權限。具體內容如下:CREATE DATABASE IF NOT EXISTS qmPlus; CREATE USER IF NOT EXISTS 'gva'@'177.7.0.1' IDENTIFIED BY 'Aa@6447985'; GRANT ALL PRIVILEGES ON qmPlus.* TO 'gva'@'177.7.0.1'; FLUSH PRIVILEGES;
注意:這里創建的用戶gva
配置允許從177.7.0.1
進行連接,這個是容器網絡的網關地址。為什么要配置為它?是為了讓容器外的宿主機能夠通過13306端口連接。
四、啟動服務
在編寫好docker-compose.yml
文件后,即可通過Docker Compose命令來啟動服務。
-
創建并啟動容器
sudo docker-compose -f deploy/docker-compose/docker-compose.yaml up -d
-d
表示以后臺模式(detached)運行容器。
-
檢查容器狀態
docker-compose ps #進入某個容器 sudo docker exec -it gva-mysql bash #查看容器掛載的卷sudo docker volume ls#進入容器的卷sudo docker run -it --rm -v docker-compose_server:/volume-data --name temp-container busybox#查看端口占用情況sudo netstat -tulpn | grep :13306
該命令將列出所有由
docker-compose.yml
文件定義的服務及其狀態。
五、停止服務
若需要停止并移除所有由docker-compose.yml
文件定義的容器,可以使用以下命令:
docker-compose down
- 該命令會停止并移除所有服務對應的容器,同時保留volume中的數據,從而達到持久化存儲的目的。
六、總結
通過本文,您已經了解了如何利用Docker Compose實現MySQL和Redis的一鍵部署,包括Docker和Docker Compose的安裝、docker-compose.yml
文件的編寫以及服務的啟動與停止。
這種方法不僅簡化了數據庫服務的配置和管理,還確保了數據的安全性。希望對您有所幫助!