使用Docker方式一鍵部署MySQL和Redis數據庫詳解

一、前言

數據庫是現代應用開發中不可或缺的一部分,MySQL和Redis作為兩種廣泛使用的數據庫系統,分別用于關系型數據庫和鍵值存儲。本文旨在通過Docker和Docker Compose的方式,提供一個簡潔明了的一鍵部署方案,確保數據庫服務的穩定運行與持久化存儲。

二、Docker及Docker Compose安裝

2.1 Docker安裝

Docker安裝過程略有不同,根據您的操作系統選擇適合的安裝方式。以下以Ubuntu為例,簡要說明安裝步驟:

  1. 更新包管理器

    sudo apt-get update
    
  2. 安裝Docker

    sudo apt-get install -y docker.io
    
  3. 啟動Docker服務并設置開機自啟

    sudo systemctl start docker
    sudo systemctl enable docker
    
  4. 驗證Docker安裝

    sudo docker --version
    

2.2 Docker Compose安裝

Docker Compose的安裝相對簡單,同樣以Ubuntu為例:

  1. 下載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頁面上的最新版本調整上述命令中的版本號。

  2. 賦予執行權限

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 驗證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分別定義了存儲卷mysqlredis,用于保存數據庫文件,防止數據丟失。

  • 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命令來啟動服務。

  1. 創建并啟動容器

    sudo docker-compose -f deploy/docker-compose/docker-compose.yaml up -d
    
    • -d表示以后臺模式(detached)運行容器。
  2. 檢查容器狀態

    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文件的編寫以及服務的啟動與停止。

這種方法不僅簡化了數據庫服務的配置和管理,還確保了數據的安全性。希望對您有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70888.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

性能附錄:如何計算并發用戶數(摘自高樓老師《性能30講》)

高樓老師《性能30講》: 性能測試實戰30講-極客時間 感興趣的同學可以去讀一下,個人感覺寫的非常好 目錄 什么是并發? 在線用戶數、并發用戶數怎么計算 總結 什么是并發? 我們假設上圖中的這些小人是嚴格按照這個邏輯到達系統的,那顯然,…

基于yolov8的糖尿病視網膜病變嚴重程度檢測系統python源碼+pytorch模型+評估指標曲線+精美GUI界面

【算法介紹】 基于YOLOv8的糖尿病視網膜病變嚴重程度檢測系統 基于YOLOv8的糖尿病視網膜病變嚴重程度檢測系統是一款利用深度學習技術,專為糖尿病視網膜病變早期診斷設計的智能輔助工具。該系統采用YOLOv8目標檢測模型,結合經過標注和處理的醫學影像數…

學習路程八 langchin核心組件 Models補充 I/O和 Redis Cache

前序 之前了解了Models,Prompt,但有些資料又把這塊與輸出合稱為模型輸入輸出(Model I/O)?:這是與各種大語言模型進行交互的基本組件。它允許開發者管理提示(prompt),通過通用接口調…

DeepSeek 開源狂歡周(五)正式收官|3FS并行文件系統榨干SSD

千呼萬喚始出來!在 DeepSeek 開源周 的第五天,今日正式收官!在大模型訓練中,每個epoch都在與存儲系統進行光速競賽——數據加載延遲會扭曲計算時空,KVCache訪問瓶頸將引發推理坍縮。DeepSeek開源的 3FS文件系統&#x…

特征工程中的三大向量化工具詳解

特征工程中的三大向量化工具詳解 在文本處理和特征工程中,TfidfVectorizer、CountVectorizer 和 DictVectorizer 是常用的工具,用于將原始數據轉換為機器學習模型可用的數值特征。以下是它們的核心區別、用法及示例: 1. CountVectorizer&…

C++ Qt常見面試題(4):Qt事件過濾器

在 Qt 中,事件過濾器(Event Filter)提供了一種機制,可以攔截并處理對象的事件(如鼠標事件、鍵盤事件等),在事件到達目標對象之前對其進行預處理。事件過濾器通常用于以下場景: 捕獲和處理特定的事件(如鼠標點擊、按鍵等);對事件進行篩選或修改;實現全局的事件監聽功…

TCP基本入門-簡單認識一下什么是TCP

部分內容來源:小林Coding TCP的特點 1.面向連接 一定是“一對一”才能連接,不能像 UDP 協議可以一個主機同時向多個主機發送消息,也就是一對多是無法做到的 2.可靠的 無論的網絡鏈路中出現了怎樣的鏈路變化,TCP 都可以保證一個…

PING命令TTL解析

在 ping 命令中,TTL(Time to Live,生存時間) 是 IP 數據包的核心字段之一,用于控制數據包在網絡中的生命周期。以下是針對 TTL 的簡明解析: 1. TTL 的核心作用 防循環機制:TTL 是一個計數器&a…

PySide(PyQT)重新定義contextMenuEvent()實現鼠標右鍵彈出菜單

在 PySide中,contextMenuEvent() 是 QWidget 類(以及繼承自它的所有子類)的一個事件處理方法,主要用于處理上下文菜單事件,也就是當用戶在控件上右鍵點擊時觸發的事件。 ? 通過重新定義contextMenuEvent()來實現自定…

GitHub SSH連接問題解決指南

🔍 GitHub SSH連接問題解決指南 問題描述 遇到錯誤:ssh: connect to host github.com port 22: Connection refused 說明您的網絡環境無法訪問GitHub的SSH端口22,常見原因: 防火墻/網絡運營商限制(國內常見&#xf…

Go紅隊開發—并發編程

文章目錄 并發編程go協程chan通道無緩沖通道有緩沖通道創建?緩沖和緩沖通道 等協程sync.WaitGroup同步Runtime包Gosched()Goexit() 區別 同步變量sync.Mutex互斥鎖atomic原子變量 SelectTicker定時器控制并發數量核心機制 并發編程階段練習重要的細節端口掃描股票監控 并發編程…

RabbitMQ 的介紹與使用

一. 簡介 1> 什么是MQ 消息隊列(Message Queue,簡稱MQ),從字面意思上看,本質是個隊列,FIFO先入先出,只不過隊列中存放的內容是message而已。 其主要用途:不同進程Process/線程T…

常用的AI文本大語言模型匯總

AI文本【大語言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺問問https://hailuoai.com/ 3、通義千問https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…

在自己的數據上復現一下LlamaGen

git倉庫:https://github.com/FoundationVision/LlamaGen 數據集準備 如果用ImageFolder讀取,則最好和ImageNet一致。 data_path/class_1/image_001.jpgimage_002.jpg...class_2/image_003.jpgimage_004.jpg......class_n/image_005.jpgimage_006.jpg.…

Go入門之接口

type Usber interface {start()stop() } type Phone struct {Name string }func (p Phone) start() {fmt.Println(p.Name, "啟動") } func (p Phone) stop() {fmt.Println(p.Name, "關機") } func main() {p : Phone{Name: "華為手機",}var p1 U…

【數據結構進階】哈希表

🌟🌟作者主頁:ephemerals__ 🌟🌟所屬專欄:數據結構 目錄 前言 一、哈希表的概念 二、哈希函數的實現方法 1. 直接定址法 2. 除留余數法 三、哈希沖突 1. 開放定址法(閉散列&#xff0…

《深度學習實戰》第4集:Transformer 架構與自然語言處理(NLP)

《深度學習實戰》第4集:Transformer 架構與自然語言處理(NLP) 在自然語言處理(NLP)領域,Transformer 架構的出現徹底改變了傳統的序列建模方法。它不僅成為現代 NLP 的核心,還推動了諸如 BERT、…

高效管理 React 狀態和交互:我的自定義 Hooks 實踐

高效管理 React 狀態和交互:自定義 Hooks 實踐 在 React 中,Hooks 是一種使我們能夠在函數組件中使用狀態和副作用的強大工具。隨著項目的增大,重復的邏輯可能會出現在多個組件中,這時使用自定義 Hooks 就非常合適。它們幫助我們…

Exoplayer(MediaX)實現音頻變調和變速播放

在K歌或錄音類應用中變調是個常見需求,比如需要播出蘿莉音/大叔音等。變速播放在影視播放類應用中普遍存在,在傳統播放器Mediaplayer中這兩個功能都比較難以實現,特別在低版本SDK中,而Exoplayer作為google官方推出的Mediaplayer替…

Meta最新研究:從單張照片到3D數字人的革命性突破

隨著人工智能技術的發展,3D建模和虛擬人物生成逐漸變得更加普及和高效。Meta(前身為Facebook)的最新研究成果展示了如何僅通過一張普通手機拍攝的照片就能生成高質量、全方位的3D數字人。這項技術不僅適用于虛擬試衣、游戲角色建模,還能廣泛應用于AR/VR內容生成等領域。本文…