docker镜像中升级php版本号

背景:有一个lnmp+redis的web项目,根据项目需要为其制作docker镜像,目的是方便toB时达到一键部署的目的。

制作一个这样的镜像所需要的几个基础镜像有:php+nginx的纯环境镜像取名为web-php7、纯mysql环境镜像、纯redis环境镜像,
这三个基础镜像就像我们使用yum install php/mysql/redis 这样安装所需要的软件一样。

还需要一个web代码执行镜像名为mysite-web和初始化业务SQL语句的镜像名为data-db。

本文讲的是如何给web-php7镜像中的php升级版本,已知web-php7中的php版本号是php7.1.30,将要为其升级到php7.1.33,
已知安装方式是yum install php71w。

docker内升级软件版本号的大致流程是:使用web-php7构建一个容器,进入到容器内部对其php版本进行升级操作,
修改完成后退出容器,然后使用新容器构建新镜像,再将新镜像推送到远程仓库即可。


更新一个镜像

# 登录docker

docker login --username=11@qq.com registry.site.com --password='123456'

# 拉取web的基础镜像

docker pull registry.site.com/cloud_registry/centos-base:web-php7

# 创建一个容器,是根据web-php7镜像创建的容器

docker run -i -t 2d6a54461cf1 /bin/bash

# 在容器内部:升级php7.1.30到php7.1.33,7.1.30是通过yun install安装的

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php71w php71w-common php71w-fpm php71w-opcache php71w-gd  php71w-mysql php71w-mysqlnd php71w-mbstring php71w-pecl-redis php71w-devel --skip-broken

# 在容器内部:修改PHP配置,修改php.ini文件底部新增如下使其支持opcache

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1

# 在容器内部:修改PHP配置,将php.ini文件expose_php=On改成php.iniexpose_php=Off

# 退出容器,根据该容器创建本地新镜像

exit
docker commit -m="Upgrade PHP version from 7.1.30 to 7.1.33" --author="wangjing" 9ecb3c66cfc1 registry.site.com/cloud_registry/centos-base:web-php7.1.33

# 查看镜像列表,可以看到上一步生成的新镜像

 docker images

# 查看镜像详情

docker inspect registry.site.com/cloud_registry/centos-base:web-php7.1.33

# 如何使用刚刚新建的web-php7.1镜像来构建web服务的镜像

  1) 删除本地的mysite-web镜像和容器,mysite-web是在web-php7这个基础镜像的基础上构建的新镜像,mysite-web中包含了php项目代码和Dockerfile

  2) 上传web项目代码到服务器/opt目录下,使用其中的Dockerfile文件构建mysite-web镜像

  3) 构建镜像

docker build -t="registry.site.com/cloud_registry/mysite-web" .

# 将web的环境镜像web-php7.1.33堆送到远程仓库

# !!!push这步前,一定要等上述全部流程都在本地测试通过后再执行

docker push registry.site.com/cloud_registry/centos-base:web-php7.1.33

(完)


(完)