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 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 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 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 如果堕落换成这个:FROM Tom/nginx:v1 2、此中supervisor.conf内容为: [supervisord] [program:nginx] [program:php-fpm] 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 { http { server { location / { error_page 500 502 503 504 /50x.html; location ~ .php$ { } } 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 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |