【Docker实战之入门】Dockerfile详细分析:构建docker镜像(2)中间件镜像

前端之家收集整理的这篇文章主要介绍了【Docker实战之入门】Dockerfile详细分析:构建docker镜像(2)中间件镜像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

以上已经构建好了一个基础的docker镜像centos7

构建docker镜像时,首先 要有一个基础镜像,然后有中间件镜像,最后生成一个应用镜像

现在centos7作为基础镜像,下面来构建两个中间件镜像:DB镜像、具有PHPNginx能力的镜像。

PHP-fpm

文件目录如下

[root@Optimus docker-training]# ls
centos7  MysqL  PHP-fpm  README.md  wordpress
[root@Optimus docker-training]# cd PHP-fpm/
[root@Optimus PHP-fpm]# ls
Dockerfile  Nginx_default.conf  Nginx_Nginx.conf  PHP_www.conf  supervisor_Nginx.conf  supervisor_PHP-fpm.conf

[supervisor_PHP-fpm.conf] 用于启动PHP-fpm.
[supervisor_Nginx.conf] 用于启动Nginx服务。

Dockerfile

[root@Optimus PHP-fpm]#  vim Dockerfile 

MAINTAINER Carson,C.J.Zeong zcy@nicescale.com

DOCKER-VERSION 1.6.2

Dockerizing PHP-fpm: Dockerfile for building PHP-fpm images

FROM csphere/centos:7.1
MAINTAINER Carson,C.J.Zeong zcy@nicescale.com

Set environment variable

ENV APP_DIR /app

RUN yum -y swap -- remove fakesystemd -- install systemd systemd-libs && \
yum -y install Nginx PHP-cli PHP-MysqL PHP-pear PHP-ldap PHP-mbstring PHP-soap PHP-dom PHP-gd PHP-xmlrpc PHP-fpm PHP-mcrypt && \
yum clean all

ADD Nginx_Nginx.conf /etc/Nginx/Nginx.conf
ADD Nginx_default.conf /etc/Nginx/conf.d/default.conf

ADD PHP_www.conf /etc/PHP-fpm.d/www.conf
RUN sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/PHP.ini

RUN mkdir -p /app && echo "<?php phpinfo(); ?>" > ${APP_DIR}/info.PHP

EXPOSE 80 443

ADD supervisor_Nginx.conf /etc/supervisor.conf.d/Nginx.conf
ADD supervisor_PHP-fpm.conf /etc/supervisor.conf.d/PHP-fpm.conf

ONBUILD ADD . /app
ONBUILD RUN chown -R Nginx:Nginx /app

[FROM csphere/centos:7.1] 基于cento:7.1作为基础镜像(父镜像)。

[MAINTAINER] 说明dockerfile由谁来维护

[ENV APP_DIR /app]设置了一个APP_DIR变量,文件目录为/app.(因为后面对Nginx做了一些修改修改Nginx的网站根目录,改为了/app。同时,用Nginx_default.conf文件覆盖默认的配置文件/etc/Nginx/conf.d/default.conf)。

[RUN yum -y install Nginx PHP-cli PHP-MysqL PHP-pear PHP-ldap PHP-mbstring PHP-soap PHP-dom PHP-gd PHP-xmlrpc PHP-fpm PHP-mcrypt] 主要安装了NginxPHP-MysqLPHP-fpm以及其他PHP的拓展包。

[ADD PHP_www.conf /etc/PHP-fpm.d/www.conf] 在之前安装PHP和Apache的时候,里面的用户是Apache,今天用的是Nginx,所以需要把Apache的用户替换成Nginx.

[RUN mkdir -p /app && echo "" > ${APP_DIR}/info.PHP] 创建/app目录。PHPinfo用来来测试NginxPHP-fpm之间有没有创建成功,因此创建了info.PHP文件放到了/app目录下。

[EXPOSE 80 443] Nginx默认端口号是80,https是443.该指令可以不写,但是推荐写上,让人一眼就知道要暴露端口80和443.

[ADD supervisor_Nginx.conf /etc/supervisor.conf.d/Nginx.conf] 添加启动Nginx和启动PHP-pfm的配置文件

[ADD supervisor_PHP-fpm.conf /etc/supervisor.conf.d/PHP-fpm.conf] 添加启动Nginx和启动PHP-pfm的配置文件

[ONBUILD ADD . /app] onbuild是dockerfile中非常重要的一条命令。onbuild在构建这一个镜像的时候不生效。他在什么时候生效呢?比如说现在生成了一个PHP-pfm的镜像,他会在下一个镜像里面生效。用好onbuild发布产品非常的快,开发人员要做的工作也非常少。

[ONBUILD RUN chown -R Nginx:Nginx /app]

构建PHP-fpm镜像

docker build -t csphere/PHP-fpm:5.4 .

查看镜像

docker images

以上镜像已经做好了。下面测试它能不能提供一个PHPNginx功能

测试PHPNginx功能
创建docker容器

[root@Optimus PHP-fpm]# docker run -d -p 8080:80 --name website csphere/PHP-fpm:5.4
e274049db704780a4742103afbf206a9a924eb2f9982dbc18432b94008f8a032

创建docker容器,用8080映射Nginx的80端口,docker容器名为website,使用docker镜像为csphere/PHP-fpm:5.4.

查看docker container状态

docker ps -a

[root@Optimus PHP-fpm]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e274049db704 csphere/PHP-fpm:5.4 "/usr/bin/supervisor 58 seconds ago Up 55 seconds 22/tcp,443/tcp,0.0.0.0:8080->80/tcp website
2d36dbfc72a0 csphere/centos:7.1 "/usr/bin/supervisor 23 hours ago Up 23 hours 0.0.0.0:2222->22/tcp base
0d1f6225836b centos "/bin/bash" 2 days ago Exited (127) 2 days ago naughty_engelbart
[root@Optimus PHP-fpm]#

查看公网IP

ifconfig eth1

eth1 这块网卡是公网IP。公网IP地址为 inet addr:10.10.4.182

访问浏览器

http://inet addr:8080/info.PHP

比如: http://10.10.4.182:8080/info.PHP

映射的是宿主机的8080端口。Nginx默认加载的是index.html或者index.PHP,刚才在创建的时候没有加这些文件。这里访问的是info.PHP

看到下面的界面说明Nginx已经启动成功,并能够和PHP-fpm进行结合来解析PHP代码
clipboard.png

进入container中查看NginxPHP是否启动

docker exec -it website /bin/bash 

进入交互式模式,进入website这个container的/bin/bash界面

[root@Optimus /]# docker exec -it website /bin/bash
[root@e274049db704 /]#

查看有多个服务的的container

supervisorctl

由于是基于centos基础镜像构建的PHP-fpm这个docker镜像,因此已经具备了基础镜像的所有功能

[root@e274049db704 /]# supervisorctl
Nginx RUNNING pid 7,uptime 0:34:43
PHP-fpm RUNNING pid 8,uptime 0:34:43
supervisor>

可以看到PHP-fpm和Nginx已经完全启动在了docker容器中。

exit 退出

supervisor> exit
[root@e274049db704 /]# exit
exit

退出后查看container状态(仍然还是UP状态)

docker ps -a

猜你在找的Docker相关文章