docker 编译安装mysql脚本

news/发布时间2024/5/14 21:14:02

在Docker中,你通常不会直接编译安装MySQL,因为Docker提供了预先构建好的MySQL镜像。这些镜像已经包含了编译好的MySQL二进制文件和所需的库文件。不过,如果你有特殊需求,例如想要自己从源代码编译MySQL并打包成Docker镜像,你可以编写一个Dockerfile来实现。

下面是一个简单的Dockerfile示例,用于从MySQL的源代码编译并安装MySQL,然后创建一个Docker镜像:

 
# 使用一个包含编译工具的基础镜像
FROM ubuntu:latest AS builder# 安装编译MySQL所需的依赖包
RUN apt-get update && \
apt-get install -y \
cmake \
gcc \
g++ \
make \
libncurses5-dev \
libssl-dev \
libreadline-dev \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*# 设置工作目录
WORKDIR /usr/src/mysql# 从MySQL官方网站下载源代码
ARG MYSQL_VERSION=8.0.26
RUN curl -sSL https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_VERSION}/mysql-${MYSQL_VERSION}.tar.gz | tar -xzvf -# 编译和安装MySQL
RUN mkdir build && \
cd build && \
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_DATADIR=/var/lib/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock && \
make -j$(nproc) && \
make install# 复制配置文件模板到镜像中
COPY my.cnf /etc/mysql/my.cnf# 创建一个MySQL用户
RUN useradd -r -s /bin/false -M mysql# 设置MySQL数据目录权限
RUN chown -R mysql:mysql /var/lib/mysql /usr/local/mysql# 设置环境变量
ENV PATH=/usr/local/mysql/bin:$PATH
ENV MYSQL_HOME=/usr/local/mysql
ENV MYSQL_DATA_DIR=/var/lib/mysql# 复制启动脚本
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh# 暴露MySQL默认端口
EXPOSE 3306# 定义容器启动时执行的命令
ENTRYPOINT ["/entrypoint.sh"]

这个Dockerfile执行了以下步骤:

  1. 使用ubuntu:latest作为基础镜像,并切换到builder阶段。
  2. 安装编译MySQL所需的依赖包。
  3. 下载MySQL的源代码。
  4. 使用cmakemake工具编译MySQL。
  5. 安装MySQL到/usr/local/mysql目录。
  6. 复制一个自定义的my.cnf配置文件到镜像中。
  7. 创建一个名为mysql的系统用户。
  8. 设置MySQL数据目录的权限。
  9. 设置环境变量。
  10. 复制一个启动脚本entrypoint.sh到镜像中,并使其可执行。
  11. 暴露MySQL的默认端口3306。
  12. 设置容器启动时的默认命令为entrypoint.sh

你需要创建一个entrypoint.sh脚本来初始化数据库、启动MySQL服务等。这个脚本可能会像这样:

 
#!/bin/bash# 初始化数据库
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql# 启动MySQL服务
/usr/local/mysql/bin/mysqld_safe --user=mysql &# 等待MySQL服务启动
while ! nc -z localhost 3306; do
sleep 1
done# 现在MySQL服务已经启动,可以执行其他命令,比如等待用户的命令
exec "$@"

要构建这个Docker镜像,你可以在Dockerfile所在的目录中运行以下命令:

 
docker build -t my-custom-mysql .

然后,你可以运行一个新的容器实例:

 
docker run -p 3306:3306 --name my-mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d my-custom-mysql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/fUSg/404.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-事件event

目录 一、事件基本概念二、事件运行机制三、事件开发流程四、事件使用说明五、事件接口坚持就有收获 一、事件基本概念 事件是一种实现任务间通信的机制,可用于实现任务间的同步,但事件通信只能是事件类型的通信,无数据传输。一个任务可以等…

移动机器人激光SLAM导航(五):Cartographer SLAM 篇

参考 Cartographer 官方文档Cartographer 从入门到精通 1. Cartographer 安装 1.1 前置条件 推荐在刚装好的 Ubuntu 16.04 或 Ubuntu 18.04 上进行编译ROS 安装:ROS学习1:ROS概述与环境搭建 1.2 依赖库安装 资源下载完解压并执行以下指令 https://pa…

【漏洞复现-通达OA】通达OA share存在前台SQL注入漏洞

一、漏洞简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。通达OA为各行业不同规模的众多用户提供信息化管理能力,包…

Electron实战之菜单与托盘

菜单、托盘是桌面端应用必备的功能之一,我们通常会在菜单上配置应用常用的:偏好设置、显示隐藏、打开文件等功能,在托盘内设置:退出、重启、帮助等辅助性功能,帮助用户方便快捷地控制应用的一些系统功能。系统托盘实际…

js设计模式:工厂模式

作用: 可以通过new关键字,批量的创建对象。 将对象的创建和具体业务逻辑进行分离,代码清晰可维护。 示例: function workFactory(workName,name){switch(workName){case jsCoder:return new jsCoder(name)breakcase javaCoder:return new javaCoder(name)break …

【网络安全 | 网络协议】一文讲清HTTP协议

HTTP概念简述 HTTP(Hypertext Transfer Protocol)协议,又称超文本传输协议,用于传输文本、图像、音频、视频以及其他多媒体文件。它是Web应用程序通信的基础,通过HTTP协议,Web浏览器可以向Web服务器发起请…

【Spring MVC篇】返回响应

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、返回静态页面…

用户空间与内核通信(一)

在Linux中,内核空间与用户空间是操作系统中的两个主要部分,它们有着明显的区别和不同的功能。 内核空间: 内核空间是操作系统内核运行的区域,它包括了操作系统内核代码、数据结构和设备驱动程序等。内核空间位于虚拟地址空间的最…

怎么用postman调用webservice(反推SoapUI)

<soapenv:Envelope xmlns:soapenv“http://schemas.xmlsoap.org/soap/envelope/” xmlns:lis“LisDataTrasen”> soapenv:Header/ soapenv:Body lis:Test lis:test111111111</lis:test> </lis:Test> </soapenv:Body> </soapenv:Envelope> Conten…

使用 Windows 11/10 上的最佳 PDF 转 Word 转换器释放 PDF 的潜力

毫无疑问&#xff0c;PDF 是最好的文档格式之一&#xff0c;但就像其他格式一样&#xff0c;有时它们确实会带来一些限制。例如&#xff0c;在某些情况下&#xff0c;您可能想要将 PDF 转换为 Word。在这种情况下&#xff0c;您始终可以借助 PDF 到 Word 转换器的帮助。 为了说…

迈向AI时代:掌握Python编程与ChatGPT的强强联手

文章目录 一、ChatGPT与Python编程的结合二、利用ChatGPT学习Python编程的优势三、如何使用ChatGPT学习Python编程四、学习技巧与建议《码上行动&#xff1a;用ChatGPT学会Python编程》特色内容简介作者简介目录获取方式 随着人工智能技术的飞速发展&#xff0c;编程已经成为了…

Spring Security基础学习

一、SpringSecurity框架简介 二、SpringSecurity入门案例 三、SpringSecurity Web权限方案 四、SpringSecurity微服务权限方案 五、SpringSecurity原理总结

【后端高频面试题--设计模式上篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 往期精彩内容 【后端高频面试题–设计模式上篇】 【后端高频面试题–设计模式下篇】 【后端高频…

Day-02-02

Httpclient测试 安装HTTP Client插件 使用IDEA自带的http接口测试工具——HTTP Client Open in HTTP Client 生成测试用例 点击绿色箭头可以运行测试用例&#xff0c;控制台会输出结果。 保存和修改测试用例 在模块下新建一个api-test包用来存放测试用例&#xff0c;将生…

三防平板电脑丨亿道工业三防平板丨三防平板定制丨机场维修应用

随着全球航空交通的增长和机场运营的扩展&#xff0c;机场维护的重要性日益凸显。为确保机场设施的安全和顺畅运行&#xff0c;采取适当的措施来加强机场维护至关重要。其中&#xff0c;三防平板是一种有效的工具&#xff0c;它可以提供持久耐用的表面保护&#xff0c;使机场维…

《乱弹篇(十六)知不言》

日本电影《我的男人》&#xff0c;是伦理情色类型片。故事讲述&#xff0c;一个小姑娘在地震后失去了亲人&#xff0c;她被远房亲戚&#xff08;一位消防员收养&#xff09;。 图&#xff1a;来源电影《我的男人》广告 两人一起生活&#xff0c;难免日久生情&#xff0c;于是便…

Covalent Network(CQT)与卡尔加里大学建立合作,共同推动区块链技术创新

Covalent Network&#xff08;CQT&#xff09;作为领先的 Web3 数据索引器和提供者&#xff0c;宣布已经与卡尔加里大学达成了具备开创性意义的合作&#xff0c;此次合作标志着推动区块链数据研究和可访问性的重要里程碑。卡尔加里大学是首个以验证者的身份加入 Covalent Netwo…

2024 ,Android 15 预览版来了

日前&#xff0c;Android 15 发布了 Preview 1 预览版&#xff0c;预览计划将从 2024 年 2 月持续到 Android 15 公开发布&#xff08;预计 10 月&#xff09;&#xff0c;3月是开发者预览版 2&#xff0c;4 月将推出 Beta 1&#xff0c;5 月将推出 Beta 2&#xff0c;6 月的 B…

C++入门

本篇是作为C学习的第一篇博客&#xff0c;主要讲解一些入门知识&#xff0c;为后续学习打基础。 C是在C的基础上&#xff0c;容纳了面向对象编程思想&#xff0c;并增加了许多有用的库以及编程范式等。因此C是完全兼容C的&#xff0c;C代码不经过任何修改即可在C编译器下编译运…

外包干了3个多月,技术退步明显。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…
推荐文章