基于Alpine構建MySQL鏡像

文章目錄

      • 基于Alpine構建MySQL鏡像
        • 一、基礎鏡像選擇與初始化
          • 1. 基礎鏡像選型
          • 2. 系統初始化
        • 二、核心配置構建
          • 1. 目錄與權限配置
          • 2. 配置文件優化
        • 三、安全增強配置
          • 1. 密碼策略強化
          • 2. 非root運行
        • 四、數據持久化與啟動配置
          • 1. 數據卷聲明
          • 2. 入口腳本優化
        • 五、完整Dockerfile示例
        • 六、關鍵優化點解析
        • 七、構建與運行示例
        • 八、常見問題解決方案
        • 九、擴展應用場景

基于Alpine構建MySQL鏡像

一、基礎鏡像選擇與初始化
1. 基礎鏡像選型
FROM alpine:3.18  # 推薦長期支持版本
  • 優勢:鏡像體積僅5MB,支持多架構(x86_64/arm64等)
  • 注意:避免使用latest標簽,確保版本可追溯性
2. 系統初始化
RUN apk add --no-cache --update \mysql=10.11.11-r0 \  # 指定版本避免兼容性問題\mysql-client \mariadb-connector-c-dev \tzdata  # 時區支持
二、核心配置構建
1. 目錄與權限配置
RUN mkdir -p /var/lib/mysql /var/run/mysqld \&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld  # 嚴格權限控制
2. 配置文件優化

創建my.cnf文件:

[mysqld]
user=mysql
datadir=/var/lib/mysql
port=3306
character-set-server=utf8mb4  # 支持Emoji等特殊字符
collation-server=utf8mb4_unicode_ci
bind-address=0.0.0.0
skip-host-cache
skip-name-resolve  # 提升安全性和性能
三、安全增強配置
1. 密碼策略強化
ENV MYSQL_ROOT_PASSWORD=root@2025  # 強密碼策略
ENV MYSQL_DATABASE=mydb
ENV MYSQL_USER=appuser
ENV MYSQL_PASSWORD=SecureP@ssw0rd
2. 非root運行
RUN addgroup -S mysql && adduser -S mysql -G mysql  # 創建專用用戶
四、數據持久化與啟動配置
1. 數據卷聲明
VOLUME /var/lib/mysql  # 持久化存儲
2. 入口腳本優化
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]  # 使用官方增強版腳本
CMD ["mysqld"]
五、完整Dockerfile示例
FROM alpine:3.18# 安裝依賴
RUN apk add --no-cache --update \mysql=10.11.11-r0 \mysql-client \tzdata# 目錄與權限
RUN mkdir -p /var/lib/mysql /var/run/mysqld \&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld# 配置文件
COPY my.cnf /etc/mysql/my.cnf# 環境變量
ENV MYSQL_ROOT_PASSWORD=root@2025 \MYSQL_DATABASE=mydb \MYSQL_USER=appuser \MYSQL_PASSWORD=SecureP@ssw0rd# 數據卷
VOLUME /var/lib/mysql# 啟動配置
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["mysqld"]
六、關鍵優化點解析
  1. 性能優化

    • 禁用DNS解析(skip-name-resolve)減少連接延遲
    • 使用utf8mb4字符集支持全Unicode字符
  2. 安全加固

    • 獨立MySQL用戶運行
    • 強制密碼復雜度策略
    • 限制root遠程訪問(需配合防火墻規則)
  3. 維護優化

    • 定期更新基礎鏡像(如Alpine 3.18 → 3.19)
    • 配置自動化備份策略(結合Docker Volume)
七、構建與運行示例
# 構建鏡像
docker build -t alpine-mysql:10.11.11 .# 運行容器
docker run -d \--name mysql-container \-e MYSQL_ROOT_PASSWORD=root@2025 \-p 3306:3306 \-v mysql_data:/var/lib/mysql \alpine-mysql:10.11.11
八、常見問題解決方案
問題現象解決方案參考來源
啟動失敗(權限問題)檢查目錄權限:chown -R mysql:mysql /var/lib/mysql
時區錯誤掛載宿主時區文件:-v /etc/localtime:/etc/localtime
連接超時檢查防火墻規則,開放3306端口
字符集異常修改my.cnf添加character-set-server=utf8mb4

九、擴展應用場景
  1. 多階段構建

    結合構建階段和運行階段,進一步減小最終鏡像體積:

FROM alpine:3.18 AS builder
RUN apk add --no-cache mysql-dev

FROM alpine:3.18
COPY --from=builder /usr/lib/libmysql* /usr/lib/


2. **ARM架構適配**  添加多架構支持:```bash
docker buildx build --platform linux/arm64,linux/amd64 -t your-repo/alpine-mysql:latest .

通過以上方案,可構建出符合生產環境要求的輕量級MySQL容器,相比官方鏡像(約500MB)體積縮小95%以上,同時保持完整的功能和安全性。實際應用中建議結合具體業務需求調整配置參數。

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

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

相關文章

Alamofire 網絡請求全流解析,通俗易懂

Alamofire 網絡請求全流程解析:從發起請求到處理響應 一、請求發起階段:準備你的"快遞" 1. 你告訴Alamofire要發什么"快遞" // 就像告訴快遞員:"我要寄一個包裹給https://api.example.com" AF.request("h…

鏈路聚合技術

鏈路聚合技術 鏈路聚合概述及應用場景 概述 鏈路聚合是把多條物理鏈路聚合在一起,形成一條邏輯鏈路。應用在交換機、路由器、服務器間鏈路,注意了,主機上面不能用鏈路聚合技術分為三層鏈路聚合和二層鏈路聚合鏈路聚合的作用 增加鏈路帶寬提供…

SpringCloud之Zuul

SpringCloud之Zuul 推薦參考:https://www.springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul 1. 什么是Zuul Spring Cloud Zuul 是 Netflix 提供的微服務網關核心組件,作為統一的 API 入口,承擔請求路由、過濾、安全控制等…

低精度定時器 (timer_list) 和 高精度定時器 (hrtimer)

Linux 內核提供了兩種主要類型的定時器,以滿足不同的時間精度需求:低精度定時器 (timer_list) 和 高精度定時器 (hrtimer)。它們各有特點和適用場景。下面,我將分別提供它們在內核代碼中的簡化使用示例。1. 低精度定時器 (timer_list) 示例ti…

虛擬機VMware的使用方法

虛擬機VMware的使用方法VMware是全球領先的虛擬化技術提供商,其產品(如VMware Workstation Pro)允許用戶在單一物理機上運行多個操作系統(OS),實現資源高效利用、隔離測試和靈活部署。本文將詳細介紹VMware…

冰島人(map)

#include<bits/stdc.h> using namespace std; struct people { string fat; int sex; }; map<string,people>mp; int pan(string s,string m) { string s1; int i0; while(s!“”) { int y0; s1m; while(s1!“”) { if(s1s&&(i<4||y<4)) return 0; s…

MS Azure Eventhub 發送 AD log 到cribl

1: 首先說一下,Cribl 提供了很多第三方的接口: 先看一下cribl 提供的接口界面: 注意到,上面提供的link 地址是 xxxxx:9093, 不鼠標放到撒謊給你嗎的? 上面,就可以看到了。所以要開的port 一定要把9093 開了,關于全部開的port: What ports do I need to open on the f…

電力名詞通俗解析5:計量系統

## 電網計量系統通俗講解&#xff1a;南網視角下的電力“精算師”想象一下&#xff0c;城市電網如同一個龐大而精密的“能量河流”&#xff0c;千家萬戶、工廠企業都在從中取水&#xff08;用電&#xff09;。如何精確計量每家用了多少“水”&#xff1f;如何確保“河流”輸送中…

關于redis各種類型在不同場景下的使用

Redis 提供了多種數據結構類型,每種類型適用于不同的場景。以下是 Redis 主要數據類型及其典型應用場景的詳細說明: 1. String(字符串) 特點:最簡單的鍵值存儲,值可以是字符串、整數或二進制數據(最大 512MB)。 適用場景: 緩存:存儲用戶會話、網頁內容等(如 SET u…

Vue 3 動態ref問題

目錄 1.問題描述 2.示例代碼 3.原因分析 4.解決方案 5.總結 1.問題描述 在Vue 3項目中&#xff0c;當使用動態ref來引用組件時&#xff0c;刪除組件后發現ref對象中對應的key仍然存在&#xff0c;只是值變為null&#xff0c;而不是完全刪除該key。 在一個可拖拽的卡片列表…

lazyvim恢復gt鍵

好的&#xff01;下面是一個完整的 LazyVim 鍵位配置 patch&#xff0c;將 gt / gT 恢復為 “切換標簽頁&#xff08;tab page&#xff09;” 的原始行為&#xff0c;同時保留原本 buffer 切換功能在其他鍵位上&#xff08;比如 / &#xff09;。 ? ? 恢復 gt 為 Tab 切換&a…

React Native 在 Web 前端跨平臺開發中的優勢與實踐

React Native 在 Web 前端跨平臺開發中的優勢與實踐 對于廣大 Web 前端開發者而言&#xff0c;移動端開發似乎總隔著一層“原生”的壁壘。學習 Swift/Kotlin、熟悉 Xcode/Android Studio 的高昂成本&#xff0c;讓許多人望而卻步。然而&#xff0c;“一次編寫&#xff0c;多端運…

QT控件 使用QtServer系統服務實現搭建Aria2下載后臺服務,并使用Http請求訪問Json-RPC接口調用下載退出

前言 最近了解到qt-solutions這個開源項目,仔細研究一番&#xff0c;發現其中的QtServer項目能在Windows系統中創建系統服務&#xff0c;Linux/Unix系統中能作為守護進程使用&#xff0c;之前一直以為編寫服務需要使用Windows api來實現&#xff0c;沒想到這么簡單。 本來之前就…

Python中關于數組的常見操作

Python中關于數組的常見操作 1.創建數組 array []2.添加元素 array.append()3.訪問元素 print(array[2])通過索引進行數組元素的訪問 4.修改元素 array[2] 3直接對想修改的元素位置進行賦值 5.刪除元素 array.remove(2) #刪除元素2del array[2] #刪除索引為2的元素6…

Image 和 IMU 時間戳同步

1 目錄 時間戳同步介紹 時間戳同步初探 時間戳獲取方式 時間戳延遲估計方法 姿態補償 勻速模型在 Bundle Adjustment 中的應用 重投影殘差 視覺特征勻速運動補償特征坐標 重投影殘差 基于特征勻速模型算法的實驗結果 軌跡勻速模型 vs 特征勻速模型 時間戳同步算法擴…

創建linux端口映射連接小網

&#x1f680; 方法 1&#xff1a;在執行機上配置 SSH 服務端轉發 這個做法是在 執行機上配置一個常駐 SSH 隧道&#xff0c;把大網的某個端口長期轉發到小網單板的 22 端口。 &#x1f468;?&#x1f4bb; 操作步驟 1?? 在執行機上創建一個 systemd 服務 假設&#xff1a; …

了解Java21

目前還沒有實操過從java8/java11直接到java17,java21。 先儲備下知識點&#xff0c;寫一些簡單例子&#xff0c;以便后續的實操。 一些新特性&#xff08;java8之后的&#xff09; var變量 和前端js定義變量一樣了&#xff0c;var搞定public static void main(String[] args) {…

【代碼】基于CUDA優化的RANSAC實時激光雷達點云地面分割

基于CUDA優化的RANSAC實時激光雷達點云地面分割 摘要&#xff1a; 本文介紹了一個高性能的激光雷達&#xff08;LiDAR&#xff09;地面分割項目。該項目基于RANSAC平面估計算法&#xff0c;并通過深度CUDA并行優化&#xff0c;將核心處理時間從近100ms縮短至10ms以內&#xff…

vuex原理以及實現

vuex官方文檔 Vuex是什么&#xff1f; Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態&#xff0c;并以相應的規則保證狀態以一種可預測的方式發生變化 每一個 Vuex 應用的核心就是 store&#xff08;倉庫&#xff09;。“stor…

APIs案例及知識點串講(上)

一.輪播圖專題CSS代碼<style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;backgro…