设为首页 收藏本站
开启辅助访问 快捷导航
菜单
猿人部落 主页 资讯 查看内容

制作nginx+php的docker镜像及其使用技巧

2019-7-23 03:43 发布者: year十万为什么 评论 0 查看 1565
1、 准备任务 :利用工具 :1.主流版本的docker,自己 利用的是 docker 1.91 版本2.centos的官方docker镜像作为根本镜像3.nginx-1.9.12;php-5.5.34;supervisor思绪:尽人皆知 ,docker镜像的创造 有2种方法 ,一种是启动

1、 准备任务 :

利用工具 :

1.主流版本的docker,自己 利用的是 docker 1.91 版本

2.centos的官方docker镜像作为根本镜像

3.nginx-1.9.12;php-5.5.34;supervisor

思绪:

尽人皆知 ,docker镜像的创造 有2种方法 ,一种是启动一个容器并在 容器里操纵,再将容器提交为一个新的镜像;一种是写Dockerfile,而后 实行dockerfile由docker给我们 一步步自动天生新的镜像;显然第二种方法 更矮小 上,也更患上 当容器须要没有 停版本更替的场景。自己 在 装置 nginx和 php的时间,更风俗自己下载源码编译装置 ,以是编译装置 这里写Dockerfile着实 是烦琐 ,而且 nginx+php并没有 是须要频发更替版本,但凡是 在 创造 容器前,跟开辟断定 好版本号,创造 好容器可以没有 停利用;以是如下 我的操纵里,前半部分,nginx和 php的装置 ,我会在 容器里操纵;着末 让nginx和 php同时启动起来,我则是写了一个Dockerfile。

2、 创造 容器

1、启动一个centos容器作为根本镜像

docker pull centos

docker run -it --name nginx centos bash

2、多么 就创立 了一个以centos的官方镜像为根本的容器,并进如容器;在 容器里用yum装置 wget下令和 编译装置 须要的下令,更新国际 yum源,下载Nginx,php源码

yum install -y wget gcc gcc-c++ make openssl-devel

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget http://nginx.org/download/nginx-1.9.12.tar.gz

wget https://sourceforge.net/projects/pcre/files/pcre/8.37/pcre-8.37.tar.gz
ps:全副 pcre版本文件(https://sourceforge.net/projects/pcre/files/pcre)

wget http://cn2.php.net/distributions/php-5.5.34.tar.gz

3、更新yum源

yum update

4、复制源码包就任 务 目次下

mv *.gz /usr/local/src

cd /usr/local/src/

5、解压源码包后并删除 ,发起删除 ,删除 的目的是没有 要让着末 的镜像过于的年夜 ;tar自带参数,解压同时删除 ,忘记 了。。

tar xf nginx-1.9.12.tar.gz

tar xf pcre-8.37.tar.gz

tar xf php-5.5.34.tar.gz

rm -f nginx-1.9.12.tar.gz pcre-8.37.tar.gz php-5.5.34.tar.gz

6、编译装置 nginx:

1)创立 nginx用户

groupadd -r nginx

useradd -r -g nginx nginx

2)编译装置 nginx

cd nginx-1.9.12/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37
make && make install
echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf #在 nginx的设置文件里加上这一行很关键,多么 nginx可以在 docker启动的时间在 背景运转 !

7、编译装置 php

1)准备php的依靠包

yum install -y bison bison-devel zlib-devel libmcrypt-devel mcrypt mhash-devel libxml2-devel libcurl-devel bzip2-devel readline-devel libedit-devel sqlite-devel
yum -y install libjpeg-devel
yum -y install libpng-devel
yum -y install freetype-devel
yum install libc-client-devel

2)编译装置 php,如果进程 傍边 报错,提示缺少 什么装置 包,就用yum装置 。ps:可参考文章(https://www.jianshu.com/p/d3d3ede407ce)

cd php-5.5.34/

./configure --prefix=/usr/local/php --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr/local/libxml --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr/local/libjpeg --with-png-dir=/usr/local/libpng --enable-gd-native-ttf --with-openssl --with-fpm-user=www --with-fpm-group=www --with-libdir=lib64 --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm --enable-xml --enable-shmop --enable-session --enable-ctype --with-iconv-dir --with-iconv

make && make install

3)如果编译装置 进程 傍边 报错,依照 报错提示的去用yum管理依靠干系 ;如果以后 的yum源管理没有 了,那么可以尝尝 :

wget http://www.atomicorp.com/installers/atomic

chmod +x atomic

./atomic

yum install -y XXX XXX

4)准备php设置文件

cp php.ini-production /etc/php.ini

cd /usr/local/php/etc

cp php-fpm.conf.default php-fpm.conf

5)修正 php设置文件,跟nginx里加一行的效果同样 ,为了启动docker时,php可以在 背景运转

;daemonize = yes的解释去丢失 ,并把yes改成 no

6)装置 php扩展,php的扩展许多,装置 方法 也都判然没有 同 ,一下以memcached扩展为例

wget https://pecl.php.net/get/memcache-2.2.7.tgz

tar xf memcache-2.2.7.tgz

cd memcache-2.2.7

/usr/local/php/bin/phpize

./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir

在 php.ini里增加 一行extension=/usr/local/php/lib/php/extensions/memcache.so

7)测试php-fpm启动

/usr/local/php/sbin/php-fpm -c /etc/php.ini -y /usr/local/php/etc/php-fpm.conf

ps -ef | grep php-fpm

8、整合nginx跟php

修正 nginx.conf;这个可以参考各类 网上的材料 ;上面 会给一个例子

/usr/local/nginx/sbin/nginx -t #查抄没设置文件

/usr/local/nginx/sbin/nginx #启动nginx

9、收拾整顿 ,删除 ,收拾整顿 yum缓存,参加 容器

cd /usr/local/src/

rm -fr *

make clean

yum clean all

exit

十、 提交容器

docker commit -m “nginx-php” nginx Tom/nginx:v1

到此,容器根本就已经 经 创造 实现 了,接上去 就是最紧张之处 了,docker奉行的是一个容器跑一个进程的脑子 ,以是启动容器的时间同样 平常也只能启动一个进程年夜 概一个脚本;而nginx跟php要能同时任务 ,须要再在 此根本上做些任务 !

同样 平常有2个方法 ,一种是写脚本,但是我没有 乐成。。以是我用了supervisor,一个可以管理 进程的工具 。接上去 我会利用Dockefile实现 着末 的任务

3、 让这个镜像可以跑起来!

1、Dockefile如下:在 宿主机下创立 一个nginx目次,并到目次下vim Dockefile

FROM Tom/nginx:v1

# Install supervisor
  RUN yum install -y python-setuptools
  RUN easy_install supervisor
  ADD supervisor.conf /etc/supervisord.conf
  EXPOSE 80 443
  CMD ["/usr/bin/supervisord"]

如果堕落换成这个:

FROM Tom/nginx:v1
  # Install supervisor
  RUN yum install -y supervisor
  ADD supervisor.conf /etc/supervisord.conf
  EXPOSE 80 443
  CMD ["/usr/bin/supervisord"]

2、此中supervisor.conf内容为:

[supervisord]
  nodaemon=true

[program:nginx]
  command=/usr/local/nginx/sbin/nginx

[program:php-fpm]
  command=/usr/local/php/sbin/php-fpm -c /etc/php.ini -y /usr/local/php/etc/php-fpm.conf

3、运转 Dockerfile

docker build -t Tom/nginx-php .

到这里,这个镜像就实现 了,可以简朴的测试一下:

docker run -d --name nginx-php -p 80:80 Tom/nginx-php

而后 用下令docker ps -a 检察下这个容器可否 失常 启动,如果有题目,可以docker logs -f nginx-php 检察下这个容器启动在 那里出了题目。

3、 nginx-php容器的利用本领

1、创立 几 个新的目次

mkdir /data/nginx/{log,php.conf,data,conf} -p

此中log目次我筹划把nginx的日记映射到这个目次下,php.cof目次我筹划把php的设置文件映射到这个目次下,data目次我筹划把网页文件映射到这个目次下,conf我筹划把nginx的设置文件映射到这个目次下

2、nginx.conf示例

worker_processes 1;

events {
    worker_connections 1024;
  }

http {

server {
      listen 80 default_server ;
      server_name test.lala.com ;

location / {
        root /usr/share/nginx/web;
        index index.html index.htm index.php api/login.php;
      }

error_page 500 502 503 504 /50x.html;
      location = /50x.html {
        root /usr/share/nginx/web;
      }

location ~ .php$ {
        root html;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /usr/share/nginx/web/$fastcgi_script_name;
        include fastcgi_params;
      }

}

}

daemon off;

3、在 /data/nginx/conf下准备好nginx.conf 在 /data/nginx/php.conf 目次下准备好php.ini和 php-fpm.conf ;之后启动容器的时间可以用下令:

docker run -d --name nginx-php -v /etc/localtime:/etc/localtime:ro --restart=always -p 80:80 -v /data/nginx/log:/usr/local/nginx/logs/ -v /data/nginx/php.conf/php.ini:/etc/php.ini -v /data/nginx/php.conf/php-fpm.conf:/usr/local/php/etc/php-fpm.conf -v /data/nginx/data:/usr/share/nginx/web -v /data/nginx/conf:/usr/local/nginx/conf/ Tom/nginx-php

4、更新nginx下的web文件,直接更新宿主机上/data/nginx/data/目次下的文件

5、如果要修正 nginx的设置文件,直接在 宿主机上的/data/nginx/conf目次下修正 nginx.conf ;修正 实现 后,你可以利用上面 下令:

docker exec nginx-php /usr/local/nginx/sbin/nginx -t  #查抄设置文件可否 精确

docker exec nginx-php /usr/local/nginx/sbin/nginx -s reload        #让容器里的nginx重新 读取nginx设置文件

6、如果要修正 php的设置文件,直接在 宿主机上的/data/nginx/php.conf目次下修正 php.ini年夜 概修正 php-fpm.conf ;修正 实现 后要重启容器才气见效

docker restart nginx-php

7、容器里的nginx日记输出 映射到了宿主机上的/data/nginx/log目次下


来源:https://www.jianshu.com/p/d515508d22c6
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

路过

雷人

握手

鲜花

鸡蛋
收藏 邀请
上一篇:PHP安装配置下一篇:CGI、FastCGI和PHP

相关阅读

一周热门

头条攻略!

日排行榜

相关分类