转自:https://www.cnblogs.com/jsonhc/p/7799358.html

查看nginx和php的目录结构:

[root@docker docker_demo]# tree nginx
nginx
├── Dockerfile
├── fastcgi_params
├── nginx-1.8.1.tar.gz
├── nginx.conf
└── www.conf
[root@docker docker_demo]# tree php
php
├── Dockerfile
├── init.d.php-fpm
├── libmcrypt-2.5.7.tar.gz
├── php-5.6.30.tar.bz2
├── php-fpm.conf.default
└── php.ini-production

这里将详细讲述nginx和php的构建过程,以及构建过程中用到的所有工具包和配置文件

首先介绍nginx的构建,查看nginx的Dockerfile:

[root@docker nginx]# cat Dockerfile
FROM centos_init:v2 MAINTAINER json_hc@163.com RUN useradd -M -s /sbin/nologin www
ADD nginx-1.8.1.tar.gz /usr/local/src RUN yum install libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel WORKDIR /usr/local/src/nginx-1.8.1
RUN ./configure --user=www --group=www --prefix=/usr/local/nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install COPY nginx.conf /usr/local/nginx/conf/nginx.conf
COPY fastcgi_params /usr/local/nginx/conf/fastcgi_params
RUN mkdir /usr/local/nginx/conf/vhost
COPY www.conf /usr/local/nginx/conf/vhost/www.conf EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

从上面的基础镜像可以看见是centos_init:v2,这里贴出该镜像的Dockerfile:

[root@docker nginx]# cat ../init/Dockerfile
# base image
FROM centos # MAINTAINER
MAINTAINER json_hc@163.com # backup CentOS-Base.repo to CentOS-Base.repo.bak
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # add epel and aliyun repo to /etc/yum.repos.d
COPY CentOS7-Base-163.repo /etc/yum.repos.d/CentOS7-Base-163.repo
COPY epel-release-latest-7.noarch.rpm /etc/yum.repos.d/ # install epel.repo
WORKDIR /etc/yum.repos.d/
RUN yum install -y epel-release-latest-7.noarch.rpm
RUN yum clean all # running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel ntpdate crontabs # change timzone to Asia/Shanghai
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

centos_init:v2镜像添加了repo的环境和编译的环境,而centos镜像就是初始的官方镜像

下面回归到nginx的构建文件:

从nginx的Dockerfile文件中可以看出,安装nginx采用的编译安装,创建了用户www和安装了nginx的一些依赖包,copy了一些配置文件到镜像中,这里

用到的配置文件将会全部放置到github上供参考,然后通过Dockerfile进行构建nginx镜像:

# docker build -t nginx:v1 .

这里需要介绍配置文件:

[root@docker nginx]# cat www.conf
server {
listen 80;
root /usr/local/nginx/html;
index index.htm index.html index.php;
location ~ \.php$ {
root /usr/local/nginx/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

可以看见fastcgi_pass php:9000;

这是因为php也是一个容器,和nginx是隔离的,后面nginx将会通过--link的方式与php镜像进行互联访问

查看php的Dockerfile文件:

[root@docker php]# cat Dockerfile
FROM centos_init:v2 MAINTAINER json_hc@163.com ADD libmcrypt-2.5.7.tar.gz /usr/local/src WORKDIR /usr/local/src/libmcrypt-2.5.7
RUN ./configure && make && make install ADD php-5.6.30.tar.bz2 /usr/local/src RUN yum -y install libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel WORKDIR /usr/local/src/php-5.6.30
RUN ./configure --prefix=/usr/local/php --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-mcrypt --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-config-file-path=/usr/local/php/etc --with-bz2 --with-gd && make && make install COPY php.ini-production /usr/local/php/etc/php.ini
COPY php-fpm.conf.default /usr/local/php/etc/php-fpm.conf RUN useradd -M -s /sbin/nologin php
RUN sed -i -e 's@;pid = run/php-fpm.pid@pid = run/php-fpm.pid@g' -e 's@nobody@php@g' -e 's@listen = 127.0.0.1:9000@listen = 0.0.0.0:9000@g' /usr/local/php/etc/php-fpm.conf
RUN sed -i 's@;daemonize = yes@daemonize = no@g' /usr/local/php/etc/php-fpm.conf EXPOSE 9000 CMD ["/usr/local/php/sbin/php-fpm"]

构建的服务必须运行在前台,而对于nginx来说:

daemon off表示将后台运行关闭了,于是运行在前台

而对于phh:sed -i 's@;daemonize = yes@daemonize = no@g' /usr/local/php/etc/php-fpm.conf

这里也是将daemon模式关闭了,于是/usr/local/php/sbin/php-fpm运行在前台

开始进行构建php:

[root@docker php]# docker build -t php .

查看生成的镜像:

[root@docker php]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php latest 8902ce599658 5 minutes ago 1.08GB
nginx latest c3babfeba09b 22 minutes ago 578MB

利用构建的镜像启动php、nginx服务:

[root@docker php]# docker run -d --name=php -v /www:/usr/local/nginx/html php
538d9866defefe8c818fbebc7109a1cf8d271583f7ce6d14d4483a103a212903
[root@docker php]# docker run -d --name=nginx -p80:80 -v /www:/usr/local/nginx/html --link=php:php nginx
c476e0e2b37f5400ea2175b9a3fc61636190727576187f3feb9248fea37ffd81

上面启动php的容器时,使用了-v进行映射,如果这里不进行映射,那么php的程序会启动,但是遇到php结尾的文件将不会解析,出现file not found的错误

查看容器状态:

[root@docker php]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c476e0e2b37f nginx "/usr/local/nginx/..." 11 seconds ago Up 10 seconds 0.0.0.0:80->80/tcp nginx
538d9866defe php "/usr/local/php/sb..." 39 seconds ago Up 38 seconds 9000/tcp php

网站目录结构:

[root@docker www]# tree .
.
├── index.html
└── test.php

进入到php容器查看hosts文件:

[root@docker php]# docker exec -it php /bin/bash
[root@538d9866defe php-5.6.30]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4 538d9866defe

查看nginx的hosts文件:

[root@docker php]# docker exec -it nginx /bin/bash
[root@c476e0e2b37f nginx-1.8.1]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4 php 538d9866defe
172.17.0.5 c476e0e2b37f

可以看见有一条php的解析,这就是为什么nginx能够和php进行通信的缘由(通过--link进行指定)

配置文件托管到github:https://github.com/jsonhc/docker_project/tree/master/docker_dockerfile/lnmp

dockerfile构建nginx并结合php的更多相关文章

  1. 使用dockerfile构建nginx镜像

    使用dockerfile构建nginx镜像 docker构建镜像的方法:   commit.dockerfile 1.使用commit来构建镜像: commit是基于原有镜像基础上构建的镜像,使用此方 ...

  2. Dockerfile构建nginx镜像

    Dockerfile构建nginx镜像 [root@bogon ~]# mkdir /opt/docker-file [root@bogon ~]# cd /opt/docker-file/ [roo ...

  3. 通过dockerfile构建nginx

    上次 利用命令行的形式来构建nginx服务, http://www.cnblogs.com/loveyouyou616/p/6806788.html 这次利用dockerfile文件来构建nginx服 ...

  4. 使用dockerfile构建nginx镜像 转

      docker构建镜像的方法:   commit.dockerfile 1.使用commit来构建镜像: commit是基于原有镜像基础上构建的镜像,使用此方法构建镜像的目的:保存镜像里的一些配置信 ...

  5. dockerfile构建nginx

    mkdir docker_demo cd docker_demo wget http://nginx.org/download/nginx-1.2.9.tar.gz vim Dockerfile FR ...

  6. 用Dockerfile构建docker image

    dockerfile是为快速构建docker image而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执 ...

  7. docker:构建nginx+php-fpm镜像(一):构建nginx自启动镜像

    步骤一:手动安装nginx环境,并记录全过程: #使用yum更新系统 yum -y update   #下面编译安装tengine,查看有哪些包需要安装 #安装wget包,用于获取安装软件包 yum ...

  8. Docker学习之4——构建NGINX镜像

    Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:1.作为Web服务器.2.作为负载均衡服务器.3.作为邮件代理服务器.4.安装及配置简单.接下来我们介绍在docker构建ng ...

  9. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...

随机推荐

  1. Oracle 锁的概念

    用scott/orcl登录并且模拟数据 SQL> conn scott/orclConnected.SQL> create table tt(id int primary key); Ta ...

  2. MySQL 二进制文件恢复数据基础版本

    先来一段 自行体会 #---------------------------------------------------------------------------------- #模拟通过b ...

  3. 简单的一个MySQL类的实现:

    '''定义MySQL类:1.对象有id.host.port三个属性2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一3.提供两种实例化方式,方式一:用户传入host和por ...

  4. [UE4]手柄导航 Navigation

    Navigation是对应游戏手柄.Left.Right.Up.Down.Next.Previous分别对应游戏手柄上的左.右.上.下.下一个.上一个按键. Left.Right.Up.Down.Ne ...

  5. [UE4]根据时间、速度进行插值:Finterp to Constant

    一般在“Tick”事件中使用: Current:当前值 Target:期望的目标值 Delta Time:时间变化值. Interp Speed:插值速度 返回值:从“当前值”过渡到“期望的目标值”的 ...

  6. [UE4]Canvas Panel应用小技巧

    当设置为满屏拉伸的时候,只要把“偏移左侧”和“偏移底部”都设置为0,就会自动拉伸为整屏了.再也不需要手动担心拉不满屏了.

  7. java eclipse maven The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法

    在eclipse 中使用maven 创建java web项目,启动服务器遇到提示:The superclass "javax.servlet.http.HttpServlet" w ...

  8. Cloudera HUE大数据可视化分析

    下载版本 cdh版本 http://archive-primary.cloudera.com/cdh5/cdh/5/ 我们下载这个 这个是我下载好的 我们解压一下 下载需要的系统包 yum insta ...

  9. 搭建(WSTMart)php电商环境时缺少fileinfo函数

    搭建WSTMart环境步骤: 第一步:安装phpstudy,一键安装即可 第二步:把下好的系统源码,放到一个文件夹中,并放到刚刚安装好的phpstudy下WWW文件夹下,如WWW>WSTMart ...

  10. JavaScript简单的实例应用

    1.显示当前时间: <!doctype> <html> <head> <meta charset='utf-8'> <script type='t ...