前言 在現代軟件工程體系中,Docker作為一種輕量級的虛擬化技術,已經成為快速構建、交付和運行應用程序的標準工具。通過容器化技術,開發人員能夠將應用及其依賴環境打包成一個獨立的單元,從而實現“一次構建,到處運行”的目標。本文將深入解析MySQL 5.7數據庫、Redis 7.0緩存中間件以及基於CentOS 7的C++編譯環境的容器化部署全流程。文中將涵蓋鏡像獲取、容器實例化、網絡端口映射、數據持久化操作、系統源配置以及編譯工具鏈構建等核心知識點。

第一部分:MySQL 5.7 關係型數據庫的容器化部署 MySQL作為應用最廣泛的開源關係型數據庫管理系統,其穩定性和成熟的生態使其成為眾多項目的首選。Docker Hub提供了官方維護的MySQL鏡像,極大地簡化了安裝配置流程。

1.1 鏡像獲取與版本選擇 首先,需要從遠程倉庫拉取MySQL 5.7版本的鏡像。選擇5.7版本而非最新的8.0版本,通常是因為舊有系統的兼容性需求或對特定版本穩定性的考量。

執行拉取命令:

docker pull mysql:5.7 AI構建項目 bash 1 Docker不僅會下載鏡像的元數據,還會分層下載文件系統。

在下載過程中,可以看到每一層(Layer)的下載狀態。這種分層存儲機制是Docker文件系統的核心優勢,它允許不同鏡像共享相同的基礎層,從而節省存儲空間並加快下載速度。待所有層級下載完畢並校驗通過後,終端將顯示下載完成的信息。

為了確認鏡像已成功存儲在本地宿主機中,可以使用鏡像列表查詢命令。該命令將列出本地所有的鏡像倉庫名稱、標籤、鏡像ID、創建時間及大小。

1.2 容器實例的創建與網絡映射 鏡像準備就緒後,下一步是根據該鏡像啓動一個容器實例。在啓動過程中,需要配置幾個關鍵參數:

--name: 指定容器的名稱,便於後續管理。 -e: 設置環境變量。對於MySQL而言,MYSQL_ROOT_PASSWORD是必須設置的變量,用於初始化root用户的密碼。 -p: 配置端口映射。格式為宿主機端口:容器端口。此處將宿主機的8201端口映射到容器內部的3306標準端口,這意味着外部訪問應連接8201端口。 -d: 指定容器在後台(Detached mode)運行。 執行如下命令:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=qwe123 -p 8201:3306 -d mysql:5.7 AI構建項目 bash 1 命令執行成功後,Docker守護進程會返回一個長字符串,即該容器的唯一ID,這標誌着容器已成功啓動並在後台運行。

1.3 容器內部交互與數據庫初始化 容器運行後,是一個獨立的Linux環境。為了進行數據庫操作,需要通過docker exec命令進入容器內部的交互式終端。

docker exec -it mysql bash AI構建項目 bash 1 進入容器後,使用標準MySQL客户端命令登錄數據庫系統。

mysql -u root -p AI構建項目 bash 1 此時系統會提示輸入密碼,需輸入在啓動容器時通過環境變量設置的qwe123。

成功登錄MySQL控制枱後,可以執行SQL語句來管理數據庫。首先,查看當前系統默認存在的數據庫列表,以驗證系統初始化的完整性。

show databases; AI構建項目 bash 1

為了再次確認當前運行的數據庫版本,執行版本查詢語句。

select version(); AI構建項目 bash 1 返回結果明確顯示版本為5.7.44,符合預期。

1.4 數據定義與操作實戰 接下來進行實際的業務模擬操作。首先創建一個名為test_db的測試數據庫。

create database test_db; AI構建項目 bash 1 執行成功後,Query OK提示表明數據庫文件已在容器內部的文件系統中建立。

使用use命令切換上下文至新建的數據庫。

use test_db; AI構建項目 bash 1 系統提示Database changed,表示後續操作均將在該數據庫作用域內執行。

在當前數據庫中創建一個用户表test_user,包含姓名(varchar類型)和年齡(int類型)兩個字段。

create table test_user(name varchar(50),age int); show tables; AI構建項目 bash 1 2 表創建成功後,show tables命令可以查看到該表的存在。

向表中插入一條測試數據,並隨即進行全表查詢以驗證數據寫入的準確性。

insert into test_user values('kaizi','99'); select * from test_user; AI構建項目 bash 1 2 查詢結果清晰展示了剛才插入的記錄,證明數據庫的讀寫功能完全正常。

1.5 外部客户端連接驗證 容器化的核心價值之一在於對外提供服務。此時,使用宿主機上的圖形化數據庫管理工具(如Navicat、DBeaver等)嘗試連接該MySQL容器。連接配置中,主機地址應填寫宿主機IP(或localhost),端口則填寫映射出來的8201端口,而非容器內部的3306端口。

連接成功建立後,展開數據庫列表,可以立刻看到剛才在容器命令行中創建的test_db數據庫。

在圖形化工具中打開test_user表,可以看到之前插入的kaizi, 99這條數據。這驗證了容器內外網絡的連通性以及數據的一致性。

第二部分:Redis 7.0 高性能鍵值存儲的部署 Redis作為高性能的Key-Value數據庫,常用於緩存、消息隊列等場景。Docker容器化部署Redis能夠極大地降低環境依賴配置的複雜度。

2.1 鏡像拉取與檢查 執行命令拉取Redis 7.0版本的鏡像。

docker pull redis:7.0 AI構建項目 bash 1 Docker將自動從Registry中下載相關層文件。

下載完成後,通過鏡像列表命令確認Redis鏡像已存在於本地倉庫中,準備隨時調用。

docker images AI構建項目 bash 1

2.2 容器啓動與端口映射 啓動Redis容器時,同樣需要關注端口映射。Redis默認端口為6379,此處將其映射至宿主機的8090端口。

docker run --name redis -d -p 8090:6379 redis:7.0 docker ps AI構建項目 bash 1 2 docker ps命令用於列出當前正在運行的容器。輸出結果顯示,Redis容器狀態為Up,且端口映射規則0.0.0.0:8090->6379/tcp已生效。

2.3 命令行讀寫測試 為了驗證Redis服務是否可用,進入容器內部並啓動redis-cli客户端工具。

docker exec -it redis bash redis-cli AI構建項目 bash 1 2 在CLI中進行基礎的鍵值對設置與獲取操作。

set sellcount 1 get sellcount AI構建項目 bash 1 2 操作結果顯示,鍵sellcount被成功設置為1,並能被正確讀取。

2.4 外部GUI工具連接驗證 使用Redis Desktop Manager或類似的圖形化工具進行連接測試。連接參數中主機地址為宿主機IP,端口為8090。連接測試通過提示“Connection successful”。

進入GUI界面後,瀏覽數據庫鍵值空間,可以直觀地發現之前通過命令行設置的sellcount鍵及其對應的值1。至此,Redis容器化部署及外部訪問配置全部完成。

第三部分:構建基於CentOS 7的C++編譯開發環境 除了部署現成的應用服務(如MySQL、Redis),Docker常被用於構建標準化的開發或編譯環境。本節將演示如何在CentOS 7的基礎鏡像上,解決官方源失效問題,並安裝GCC編譯器,最終編譯運行C代碼。

3.1 基礎操作系統鏡像準備 拉取CentOS 7的基礎鏡像。CentOS 7因其在服務器領域的廣泛應用,常被選作基礎運行環境。

docker pull centos:7 AI構建項目 bash 1

啓動容器並直接進入交互模式(Interactive Mode)。參數-it是-i(交互式)和-t(分配偽終端)的組合,這使得用户可以直接在容器內獲得一個Bash Shell。

docker run -it --name mycpp centos:7 bash AI構建項目 bash 1 命令執行後,命令提示符從宿主機切換到了容器內部(例如 [root@容器ID /]#),表明當前已處於容器的文件系統中。

此時,若在宿主機開啓另一個終端窗口執行docker ps,可以看到名為mycpp的容器正在運行,執行的命令為bash。

3.2 解決YUM源失效問題(關鍵步驟) 由於CentOS 7已停止維護(EOL),官方的yum源地址大多已失效或歸檔,直接使用yum install往往會報錯。因此,配置可用的第三方鏡像源是構建環境的第一步。

首先,備份原有的repo配置文件,以防後續操作失誤需要恢復。

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup AI構建項目 bash 1 接着,下載國內(如阿里雲)提供的CentOS 7鏡像源配置文件。由於部分精簡版容器可能未預裝wget,優先嚐試使用curl命令。

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo AI構建項目 bash 1 若環境中已包含wget,也可使用:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo AI構建項目 bash 1 這一步將替換yum主要配置文件,指向依然提供服務的鏡像站點。

配置更改後,必須清理舊的yum緩存,防止元數據衝突。

yum clean all AI構建項目 bash 1 系統將提示正在清理倉庫緩存。

隨後,重建yum緩存,這一步會從新的鏡像源下載軟件包的元數據,建立本地索引,確保後續安裝軟件時能正確索引到包文件。

yum makecache AI構建項目 bash 1 當看到Metadata Cache Created提示時,説明源配置成功。

3.3 GCC編譯工具鏈安裝 在源配置無誤後,開始安裝GNU編譯器集合(GCC)。

yum install gcc AI構建項目 bash 1 Yum會自動解析依賴關係,下載並安裝GCC及其所需的庫文件(如glibc-devel, kernel-headers等)。

安裝過程中需確認安裝提示(輸入y或使用-y參數)。待出現Complete!字樣,表明編譯環境已就緒。

3.4 C語言代碼編寫與編譯運行 為了驗證環境,編寫一段簡單的C代碼。可以使用容器內自帶的編輯器(如vi)創建一個名為code.c的文件。文件中包含標準的輸入輸出邏輯。

保存文件後,調用GCC進行編譯。-o參數用於指定輸出的可執行文件名。

gcc code.c -o code AI構建項目 bash 1 若代碼無語法錯誤,編譯器將靜默完成編譯,生成名為code的可執行文件。

最後,在當前目錄下運行該程序。

./code AI構建項目 bash 1 程序成功輸出預期的結果,證明該基於Docker的CentOS 7 C++編譯環境已構建完整且功能正常。

總結

本文詳細記錄了在Docker環境下部署數據庫服務(MySQL)、緩存服務(Redis)以及構建自定義開發環境(CentOS+GCC)的全過程。從鏡像的獲取、容器的參數化啓動、網絡端口的映射機制,到容器內部的系統配置與源切換,每一個步驟都緊密結合實際操作場景。這種容器化的部署方式,不僅隔離了應用環境,避免了宿主機環境的污染,更極大地提升了環境搭建的效率與可移植性,是現代DevOps流程中的基石。

———————————————— 版權聲明:本文為CSDN博主「Undoom」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/2301_80863610/article/details/155771226