文章目录

      • 基于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…