1 背景介紹
十載的平谷網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整平谷建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“平谷網(wǎng)站設(shè)計”,“平谷網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
為了方便開發(fā)人員對自己的應(yīng)用代碼進(jìn)行鏡像封裝,需要提供一個中間件基礎(chǔ)鏡像讓他們直接在上面封裝應(yīng)用鏡像,然后在docker編譯服務(wù)器上面按鏡像打包流程了封裝鏡像,采用流水式的方式完成所有操作。
今天給大家介紹一下如何將傳統(tǒng)nginx+php-fpm組合中間件軟件在docker上面將其封裝成中間件鏡像,然后由讓開發(fā)將其php應(yīng)用代碼部署到中間件容器上面運行起來。
2 鏡像封裝流程
基礎(chǔ)鏡像:在構(gòu)建中間件鏡像前,需要準(zhǔn)備一個干凈的centos7鏡像,方便在基礎(chǔ)鏡像上面安裝中間件nginx和php-fpm等軟件。
構(gòu)建中間件鏡像:在構(gòu)建應(yīng)用鏡像前,提前構(gòu)建好中間件鏡像,然而中間件鏡像是基于centos基礎(chǔ)鏡像上面去安裝nginx和php-fpm中間件軟件,對其中間件性能參數(shù)優(yōu)化配置,并定義中間件運行環(huán)境啟動腳本,最后通過命令封裝成中間件鏡像。
構(gòu)建應(yīng)用鏡像:以中間件鏡像做為基礎(chǔ)鏡像,編寫dockerfile腳本在發(fā)布php代碼和更新nginx配置,最后通過命令將其封裝成應(yīng)用鏡像。
啟動應(yīng)用容器:使用docker run命令將應(yīng)用鏡像啟動。
3 鏡像封裝過程
3.1 環(huán)境準(zhǔn)備
ü 鏡像列表
鏡像名 |
鏡像說明 |
鏡像來源 |
Centos:latest |
Centos7操作系統(tǒng)鏡像 |
公網(wǎng)下載 |
nginx-phpfpm70:v1.0 |
安裝好了nginx和php中間件鏡像 |
離線構(gòu)建 |
acitivty_admin:v1.0 |
基于中間件鏡像上面部署應(yīng)用生成新的應(yīng)用鏡像 |
離線構(gòu)建 |
ü 編譯環(huán)境
1、 準(zhǔn)備一臺kernel 3.10以上版本的linux主機 。
2、 需要在主機上面安裝docker 1.13.1軟件。
3、 主機需要能上外網(wǎng)方便外網(wǎng)鏡像下載和軟件包下載 。
下面直接在編譯主機上面用docker search centos命令查看外網(wǎng)鏡像。下載星最多的centos鏡像,然后用docker pull centos直接下載,最后會將鏡像下載到本地。
前面我們已經(jīng)將centos7的鏡像文件下載下來,現(xiàn)在構(gòu)建中間件鏡像可以直接在基于centos鏡像上面安裝nginx和php-fpm軟件,最后在通過docker命令生成一個新的中間件鏡像。
以下是準(zhǔn)備好的中間件構(gòu)建鏡像的dockerfile腳本:
# 一個干凈的centos鏡像 FROM centos: latest # 鏡像創(chuàng)建者 MAINTAINER jaymarco@shsnc.com # 在centos鏡像中配置php的yum源,然后安裝php相關(guān)依賴包、php-fpm軟件、php對應(yīng)的擴展包 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_64 php70-php-pecl-redis.x86_64 python-setuptools \ php70-php-mbstring.x86_64 php70-php-snmp.x86_64 php70-php-pecl-zip.x86_64 \ php70-php-MySQLnd.x86_64 php70-php-pecl-mysql.x86_64 gcc gcc-c++ automake libtool make cmake openssl openssl-devel pcre-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 性能參數(shù)優(yōu)化配置 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 # 配置鏡像時區(qū)文件,方便鏡像啟動成容器后時區(qū)與本地主機一致 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ echo 'Asia/Shanghai' >/etc/timezone # 安裝supervisor后臺進(jìn)程管理工具,方便容器啟動多進(jìn)程進(jìn)行后臺監(jiān)控管理。 #Install supervisor 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服務(wù) CMD ["/startserv.sh"] |
配置文件supervisord.conf,下面標(biāo)紅部分屬于服務(wù)啟動配置。
[unix_http_server] file=/tmp/supervisor.sock ; (the path to the socket file) [supervisord] logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) logfile_backups=10 ; (num of main logfile rotation backups;default 10) loglevel=info ; (log level;default info; others: debug,warn,trace) pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid) nodaemon=true ; (start in foreground if true;default false) minfds=1024 ; (min. avail startup file descriptors;default 1024) minprocs=200 ; (min. avail process descriptors;default 200) user=root ; ; the below section must remain in the config file for RPC ; (supervisorctl/web interface) to work, additional interfaces may be ; added by defining them in separate rpcinterface: sections [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket [program:php-fpm] command=/opt/remi/php70/root/usr/sbin/php-fpm -F [program:nginx] command=/usr/sbin/nginx -c /etc/nginx/nginx.conf |
服務(wù)啟動腳本 startserv.sh
#!/bin/sh /usr/bin/supervisord -n -c /etc/supervisord.conf |
前面已經(jīng)將dockerfile腳本和配置文件準(zhǔn)備就緒后,接下來直接可以使用docker構(gòu)建命令來構(gòu)建一個新的中間件鏡像。最后也會在本地生成一個nginx-phpfpm:v1.0鏡像。
構(gòu)建命令:
docker build –t nginx-phpfpm:v1.0 .
構(gòu)建過程:
部署應(yīng)用鏡像需要準(zhǔn)備兩份東西一份是php應(yīng)用代碼,另一份是nginx配置文件。并將這兩份東西打包到中間件鏡像文件中,最后會構(gòu)建一個新的應(yīng)用鏡像。
Nginx 配置參數(shù)
server { listen 8080; server_name 127.0.0.1; large_client_header_buffers 4 16k; client_max_body_size 300m; client_body_buffer_size 128k; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_buffer_size 64k; proxy_buffers 32 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; location / { root /var/www/cecrm_acitivtycenter; index index.php; try_files $uri $uri/ /index.php?$uri&$args; } location ~ ^.+.php { include fastcgi_params; root /var/www/cecrm_acitivtycenter; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_intercept_errors on; fastcgi_connect_timeout 600; fastcgi_send_timeout 1800; fastcgi_read_timeout 6000; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } } |
php 應(yīng)用程序構(gòu)建dockerfile腳本
# 引用中間件鏡像做為應(yīng)用構(gòu)建基礎(chǔ)鏡像 FROM nginx-phpfpm70:v1.0 MAINTAINER jaymarco@shsnc.com # 發(fā)布 php 程序代碼 ADD admin /var/www/cecrm_acitivtycenter/admin #nginx 性能參數(shù)優(yōu)化 ADD admindocker.conf /etc/nginx/conf.d/admindocker.conf |
前面已經(jīng)將dockerfile腳本和配置文件準(zhǔn)備就緒后,接下來直接可以使用docker構(gòu)建命令來構(gòu)建一個新的應(yīng)用鏡像。最后也會在本地生成一個acitivty_admin:v1.0鏡像。
構(gòu)建命令:
docker build -t acitivty_admin:v1.0 .
構(gòu)建過程:
我們可以看到應(yīng)用鏡像已經(jīng)構(gòu)建成功
啟動應(yīng)用容器
docker run -itd --name acitivty_admin -p 8090:8090 acitivty_admin:v1.0
查看容器中啟動的進(jìn)程,發(fā)現(xiàn)nginx和php-fpm進(jìn)程已經(jīng)成功啟動
最后我們驗證一下發(fā)布后的應(yīng)用能正常訪問
當(dāng)前名稱:基于docker構(gòu)建中間件容器應(yīng)用環(huán)境
文章網(wǎng)址:http://m.rwnh.cn/article14/jdgsge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、搜索引擎優(yōu)化、、網(wǎng)站設(shè)計、電子商務(wù)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)