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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

概述

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

从构建一个任意版本的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 地址

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s