GItOps - k8s的微服务实战1 - 构建业务镜像

news2024/9/22 10:06:41

概述

在学习了容器化、docker和k8s的 Ingress-Nginx 、server 和pod 知识后,开启了 k8s的微服务实战第三篇,在搭建环境废了一点周折,这次实战的目的是集成在gitlab里,实现自动打包、发布的功能。

  • Mac M2芯 搭建k8s(minikube)超详细实战
  • Mac M2芯 搭建k8s(kubeadm)超详细实战

从构建一个任意版本的php-fpm开始

万事从头难,熟练的使用dockerfile,打包自己的镜像开始,不用太刻意,什么语言都是一样的,从你熟悉的编程语言就可以,我从熟悉的php语言开始。

# php历史版本
https://www.php.net/releases/
# wget
wget https://www.php.net/distributions/php-7.2.28.tar.gz

在之前的实践中,从零开始对php7进行源码编译,对之前的知识进行了系统的补充,php在k8s流行以后落伍的一部分原因就是扩展不方便,还有就是代码打包不方便,不了解的朋友请看我之前编写的关于PHP源码安装和生命周期,接下来我会对这部分进行补充。

开始之前,你先思考几个问题源码安装时怎么安装php的扩展?怎么安装pecl上找不到的老旧扩展?怎么把文件从宿主机安装到镜像里?

我使用的是php官方 releases php-7.2.28版本,制作的Dockerfile。

FROM centos:centos7

ENV PHP_VERSION php-7.2.28

WORKDIR /Package

COPY . .
  • FROM 继承基础镜像,优先级: 本地 > docker hub 仓库
  • ENV 声明 变量 ,再文件里使用
  • WORKDIR 创建工作目录,会自动创建
  • COPY 构建镜像的当前目录 拷贝到 WORKDIR

安装php编译所需要的依赖,下载PHP源码的安装版本,解压编译。

# 安装编译依赖
RUN yum -y update && yum -y install gcc gcc-c++ autoconf automake \
zlib zlib-devel openssl openssl-devel pcre pcre-devel \
libxml2 libxml2-devel sqlite-devel wget curl libtool \
 php-dev php-pear vim php-devel libcurl libcurl-devel
 
# 下载php版本 
RUN mkdir $HOME/Package/ && cd $HOME/Package/ \
&& wget https://www.php.net/distributions/${PHP_VERSION}.tar.gz \
&& tar -zxvf ${PHP_VERSION}.tar.gz 

编译PHP,这个步骤很关键,最好是指定指定安装路径 和 扩展路径,后面安装扩展会用到。

RUN $HOME/Package/${PHP_VERSION}/configure --prefix=/usr/local/php7 \
 --with-php-config=/usr/local/php7/bin/php-config \
 --enable-fpm  \
 --enable-debug \
 --enable-opcache \
 --enable-zip \
 --enable-sockets \
 --with-pdo-mysql \
 --with-mysqli \
 --with-pear \
 --with-curl \
 --with-openssl && make && make install

编译成功后会显示以下信息,这都是当前版本的目录信息。

Installing shared extensions:     /usr/local/php7/lib/php/extensions/debug-non-zts-20190902/
Installing PHP CLI binary:        /usr/local/php7/bin/
Installing PHP CLI man page:      /usr/local/php7/php/man/man1/
Installing PHP FPM binary:        /usr/local/php7/sbin/
Installing PHP FPM defconfig:     /usr/local/php7/etc/
Installing PHP FPM man page:      /usr/local/php7/php/man/man8/
Installing PHP FPM status page:   /usr/local/php7/php/php/fpm/
Installing phpdbg binary:         /usr/local/php7/bin/
Installing phpdbg man page:       /usr/local/php7/php/man/man1/
Installing PHP CGI binary:        /usr/local/php7/bin/
Installing PHP CGI man page:      /usr/local/php7/php/man/man1/
Installing build environment:     /usr/local/php7/lib/php/build/
Installing header files:          /usr/local/php7/include/php/
Installing helper programs:       /usr/local/php7/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php7/php/man/man1/
  page: phpize.1
  page: php-config.1
/root/php-7.4.28/build/shtool install -c ext/phar/phar.phar /usr/local/php7/bin/phar.phar
ln -s -f phar.phar /usr/local/php7/bin/phar
Installing PDO headers:           /usr/local/php7/include/php/ext/pdo/

为php、php-fpm 命令建立软链接,需要和你安装时--prefix的目录保持一致,不然会发生错误。

RUN ln -s /usr/local/php7/bin/php /usr/local/bin/php && \
cp $HOME/Package/${PHP_VERSION}/php.ini-development /usr/local/php7/lib/php.ini


RUN ln -s /usr/local/php7/sbin/php-fpm /usr/local/sbin/php-fpm \ 
&& cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf \ 
&& cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

wget 安装php扩展,可以去pecl 官网去查看,太老的版本可能已经不存在了,需要你自己预先存起来,我以redis-4.2.0 和 yaf-3.0.7做例子,pear安装扩展官网

# redis-4.2.0  pecl wget 方式
RUN wget https://pecl.php.net/get/redis-4.2.0.tgz && \
tar -zxvf redis-4.2.0.tgz &&  cd redis-4.2.0 && phpize \
&&  ./configure --with-php-config=/usr/local/php7/bin/php-config \
&& make && make install && echo 'extension=redis.so' >> /usr/local/php7/lib/php.ini


# yaf yaf-3.0.7 https://pecl.php.net/get/yaf-3.0.7.tgz

RUN wget https://pecl.php.net/get/yaf-3.0.7.tgz && \
tar -zxvf yaf-3.0.7.tgz &&  cd yaf-3.0.7.tgz && phpize \
&&  ./configure --with-php-config=/usr/local/php7/bin/php-config \
&& make && make install && echo 'extension=yaf.so' >> /usr/local/php7/lib/php.ini

最后,编写启动脚本。

#设置启动脚本 
RUN  echo "php-fpm && tail -f /dev/null" > $HOME/run.sh 

CMD ["/bin/bash","sh $HOME/Package/run.sh"]

EXPOSE 9000

使用命令 docker build -t php-fpm:v2.0 -f centos7_phpfpm72 . 构建自己的镜像,最后把整体的Dockerfile放在这。

在这里插入图片描述

最后

最后一点也是我最想说的地方,中间过程错了好多次,每一个都很诡异,最后终于都克服了,看到这里的小伙伴加油呀,别放弃,一切会好,可以把这个做为基础,这些都是差不多的,原理都是一样的。git hub 地址

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

puzzle(0332)色块拼图、物换星移、移星掠形

目录 一,纯色块拼图——旋转 二,物换星移 三,六边形纯色块拼图——旋转 四,纯色块拼图——轮换 五,移星掠形 练习模式 策略 比赛模式 一,纯色块拼图——旋转 这种纯粹就是数字拼图——旋转的简化版…

Web3中文|逆流前行:日本开始拥抱Web3

在最近的一次东京之行中,我发现交谈过的人似乎都没有因FTX崩溃(或之前加密领域的一系列负面事件)感到特别担忧。 众议院议员、日本现今执政党自民党的Web3项目团队成员Masaaki Taira表示,FTX的垮台“对政策制定没有影响”。 尽管…

DC/DC电源模块直流升压线性可调正负输出5v12v24v转0-±50v/±110v/±200v/±250v/±360v/±500v

特点● 效率高达70%以上● 1*2英寸标准封装● 正负电压输出● 价格低● 电压控制,输出电压随控制电压线性变化● 工作温度: -40℃~85℃● 阻燃封装,满足UL94-V0 要求● 温度特性好● 可直接焊在PCB 上应用GRA 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电…

CentOS 7 部署Nginx和前端框架

参考: Centos 7下安装配置Nginx-阿里云开发者社区 (aliyun.com) 阿里P8架构大牛整理的Nginx 从入门到实践,万字详解 安装nginx之后,处理 conf.d下无default.conf文件 1. CentOS 7 下安装配置 Nginx 一、配置 EPEL 源 sudo yum install -y e…

jquery方法学习及案例

JQ框架入手须知封装方法学习及应用插件(白嫖超好用)总结案例推荐网课链接入手须知 1.进官网点3.6版本 2.复制全部代码 3.建立文档名为jquery.min.js,粘贴代码 (用的时候同cssjs引入) 封装方法学习及应用 介绍联系…

Authing,助力先进制造 10 万亿产值之路

工信部表示,截止今年 9 月,一批有竞争力的先进制造业集群正在形成。重点培育的 25 个先进制造业集群,其主导产业产值近 10 万亿元,其中的 17 个集群产值同比增速超过两位数。 Authing 深耕芯片、机器人、航空航天、医药医械等先进…

多品类多SKU存储的四向穿梭车|海格里斯HEGERLS超高RGV四向穿梭车供应

近年来,随着电商、快递的快速发展,物流行业也迎来了智能化、数字化转型。伴随上下游产业链条的智能化升级,物流机器人产品开始被普及、应用。在仓储物流领域,AGV(自动引导车)、AMR(自主移动机器…

2.编写第一个网页

第一个网页 ● 首先建立一个文件夹 ● 之后建立一个文件 ● 文件名称以.html结尾 ● 输入一个!,回车,就会生成一个html框架 ● 其他的部分不用看,稍后会介绍,看这个标签,英文的意思就是标题&#xff…

编写一个简版的数据库维护框架03-父窗口界面

框架的主要内容就是创建一个父类Form,实现基本逻辑。使用时,这些逻辑就无需用户实现。用户只需按照规则,设计好界面即可。 一、简版界面 界面如下: 界面分为两大部分,查询定位和数据维护 查询定位 查询定位将根据…

非极大值抑制NMS与柔性非极大抑制Soft-NMS的python实现

非极大值抑制NMS的python实现 什么是非极大值抑制 非极大值抑制的主要目的是为了消除多余的框,找到最佳的物体检测的位置。 比如我们想要检测手的时候, RCNN网络在训练之后会给出许多个预测框(比图上的更多), 我们先通过他们的置信度筛选出一批不符合的框, 剩下如图…

智能BI与传统报表的区别是什么?

随着企业信息化的深入, 企业的信息化系统日益增多。各个信息化系统也随着应用的逐渐深入, 随之产生大量的信息数据。面对已成几何级增长的数据量, 如何从中提取有效数据, 如何将数据转换为有价值的数据? 成为企业面临的问题之一。 其实与数据相关的工具除了传统报表还有如今火…

百度网盘普通用户如何上传单文件最大4G文件。window split命令如何分割文件上传。

普通用户使用百度网盘Web端上传文件时,单文件最大支持1G大小;使用网盘PC客户端上传文件时,单文件最大支持4G;如果您需要上传大于4G文件,可充值百度网盘会员,其中:1、百度网盘会员使用网盘PC客户…

案例:DNN进行分类

7.2 案例:DNN进行分类 学习目标 目标 知道tf.data.Dataset的API使用知道tf.feature_columnAPI使用知道tf.estimatorAPI使用应用 无 7.2.1 数据集介绍 对鸢尾花进行分类:概览 本文档中的示例程序构建并测试了一个模型,此模型根据鸢尾花的花…

《MFC编程》:MFC程序执行流程

《MFC编程》:MFC程序启动《MFC编程》:MFC程序启动入口函数执行流程CWinApp的成员视频链接《MFC编程》:MFC程序启动 入口函数 MFC程序的入口函数与win32程序一样,都是从WinMain入口。 但是MFC库已经实现了WinMain函数&#xff0…

ORA-65096: invalid common user or role 解决方法

问题描述 oracle 12C 创建数据库时报错: ORA-65096: invalid common user or role name例如: SQL> create user rui identified by oracle;create user rui identified by oracle* ERROR at line 1: ORA-65096: invalid common user or role name原…

记录1-两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案…

分享111个JS图片切换特效,总有一款适合您

分享111个图片切换,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 111个图片切换下载链接:https://pan.baidu.com/s/1iGzOzU3WZbjBF21dZzoH9w?pwdqi5u 提取码:qi…

Linux常见指令大全(二)

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…

2023年第一篇来谈谈效率

晚上临走的时候和同事聊了聊关于效率的问题,暂且称呼为A同学。借着和A同学的这次畅谈记录下这段时间的所负责的数据迁移过程。 数据迁移的整体内容并不复杂。主要内容如下 我们在做事情的时候总会遇到这件事情所关联的其他问题。 不要带着情绪去工作 书写脚本的时候…

【HBase高级】6. HBase数据结构(下)——LSM树数据结构、布隆过滤器、StoreFiles(HFile)结构

5.3 LSM树数据结构 1、简介 传统关系型数据库,一般都选择使用B树作为索引结构,而在大数据场景下,HBase、Kudu这些存储引擎选择的是LSM树。LSM树,即日志结构合并树(Log-Structured Merge-Tree)。 LSM树主要目标是快速建立索引B树…