使用docker构建中间件容器环境

1、背景介绍

为了方便开发人员对自己的应用代码进行镜像封装,需要提供一个中间件基础镜像让他们直接在上面封装应用镜像,然后在docker编译服务器上面按镜像打包流程了封装镜像,采用流水式的方式完成所有操作。今天给大家介绍一下如何将传统nginx+php-fpm组合中间件软件在docker上面将其封装成中间件镜像,然后由让开发将其php应用代码部署到中间件容器上面运行起来。

2、镜像封装流程


基础镜像:在构建中间件镜像前,需要准备一个干净的centos7镜像,方便在基础镜像上面安装中间件nginx和php-fpm等软件。

构建中间件镜像:在构建应用镜像前,提前构建好中间件镜像,然而中间件镜像是基于centos基础镜像上面去安装nginx和php-fpm中间件软件,对其中间件性能参数优化配置,并定义中间件运行环境启动脚本,最后通过命令封装成中间件镜像。

构建应用镜像:以中间件镜像做为基础镜像,编写dockerfile脚本在发布php代码和更新nginx配置,最后通过命令将其封装成应用镜像。

启动应用容器:使用docker run命令将应用镜像启动。


3、镜像封装过程

3.1、环境做准备

镜像列表

编译环境

1、准备一台kernel 3.10以上版本的linux主机

2、需要在主机上面安装docker 1.13.1软件。

3、主机需要能上外网方便外网镜像下载和软件包下载

3.2、下载centos基础镜像

下面直接在编译主机上面用dockersearch centos命令查看外网镜像。下载星最多的centos镜像,然后用docker pull centos直接下载,最后会将镜像下载到本地。

3.3、构建中间件镜像

前面我们已经将centos7的镜像文件下载下来,现在构建中间件镜像可以直接在基于centos镜像上面安装nginx和php-fpm软件,最后在通过docker命令生成一个新的中间件镜像。

以下是准备好的中间件构建镜像的dockerfile脚本

#一个干净的centos镜像

FROM centos:latest

#镜像创建者

MAINTAINER jaymarco@shsnc.com

#在centos镜像中配置php的yum源,然后安装php相关依赖包、php-fpm软件、php对应的扩展包

RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm&& rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm&& \

yum install -y php70-php-gd.x86_64 php70-php-mcrypt.x86_64 php70-php-fpm.x86_64php70-php-pecl-redis.x86_64 python-setuptools \

php70-php-mbstring.x86_64php70-php-snmp.x86_64 php70-php-pecl-zip.x86_64    \

php70-php-mysqlnd.x86_64php70-php-pecl-mysql.x86_64 gcc gcc-c++  automake  libtool make  cmake openssl openssl-develpcre-devel &&\

yum clean all

#在centos镜像中安装nginx软件

RUN rpm -ivh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.10.3-1.el7.ngx.x86_64.rpm

#php性能参数优化配置

RUN sed -e 's/127.0.0.1:9000/9000/' -e '/allowed_clients/d' -e'/catch_workers_output/s/^;//' -e '/error_log/d' -i  /etc/opt/remi/php70/php-fpm.d/www.conf&&\

sed -e's/daemonize = yes/daemonize = no/' -i /etc/opt/remi/php70/php-fpm.conf

#配置镜像时区文件,方便镜像启动成容器后时区与本地主机一致

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\

echo'Asia/Shanghai' >/etc/timezone

#安装supervisor后台进程管理工具,方便容器启动多进程进行后台监控管理。

#Installsupervisor

RUN easy_install supervisor && \

    mkdir -p /var/log/supervisor && \

    mkdir -p /var/run/sshd && \

    mkdir -p /var/run/supervisord

#将本地修改好的supervisord配置文件COPY到镜像中

ADD supervisord.conf /etc/supervisord.conf

#将编写好的脚本从本地COPY到镜像中

ADD startserv.sh /startserv.sh

RUN chmod +x /startserv.sh

#将容器中的80,9000端口映射成宿主机器中的某个端口

EXPOSE 80 9000

#容器启动时启动nginx和php服务

CMD ["/startserv.sh"]

配置文件supervisord.conf,下面标红部分属于服务启动配置。

服务启动脚本startserv.sh

#!/bin/sh

/usr/bin/supervisord -n -c /etc/supervisord.conf

前面已经将dockerfile脚本和配置文件准备就绪后,接下来直接可以使用docker构建命令来构建一个新的中间件镜像。最后也会在本地生成一个nginx-phpfpm:v1.0镜像。

构建命令:

docker build –t nginx-phpfpm:v1.0 .

构建过程:

3.4、构建应用镜像

部署应用镜像需要准备两份东西一份是php应用代码,另一份是nginx配置文件。并将这两份东西打包到中间件镜像文件中,最后会构建一个新的应用镜像。

Nginx配置参数

php应用程序构建dockerfile脚本

前面已经将dockerfile脚本和配置文件准备就绪后,接下来直接可以使用docker构建命令来构建一个新的应用镜像。最后也会在本地生成一个acitivty_admin:v1.0镜像。

构建命令:

docker  build -tacitivty_admin:v1.0 .

构建过程:

我们可以看到应用镜像已经构建成功

3.5、容器启动与验证

启动应用容器

docker run -itd --name acitivty_admin -p 8090:8090  acitivty_admin:v1.0

查看容器中启动的进程,发现nginx和php-fpm进程已经成功启动

最后我们验证一下发布后的应用能正常访问

欢迎大家关注我的微信公众号,里面有很多相关的技术干货,也能随时联系到我。谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容