基於docker構建中介軟體容器應用環境

jaymarco發表於2020-06-30

1 背景介紹

為了方便開發人員對自己的應用程式碼進行映象封裝,需要提供一箇中介軟體基礎映象讓他們直接在上面封裝應用映象,然後在docker編譯伺服器上面按映象打包流程了封裝映象,採用流水式的方式完成所有操作。

今天給大家介紹一下如何將傳統nginx+php-fpm組合中介軟體軟體在docker上面將其封裝成中介軟體映象,然後由讓開發將其php應用程式碼部署到中介軟體容器上面執行起來。


2 映象封裝流程

  • 基礎映象:在構建中介軟體映象前,需要準備一個乾淨的centos7映象,方便在基礎映象上面安裝中介軟體nginx和php-fpm等軟體。

  • 構建中介軟體映象:在構建應用映象前,提前構建好中介軟體映象,然而中介軟體映象是基於centos基礎映象上面去安裝nginx和php-fpm中介軟體軟體,對其中介軟體效能引數最佳化配置,並定義中介軟體執行環境啟動指令碼,最後透過命令封裝成中介軟體映象。

  • 構建應用映象:以中介軟體映象做為基礎映象,編寫dockerfile指令碼在釋出php程式碼和更新nginx配置,最後透過命令將其封裝成應用映象。

  • 啟動應用容器:使用docker run命令將應用映象啟動。


3 映象封裝過程

3.1 環境準備

ü   映象列表

映象名

映象說明

映象來源

Centos:latest

Centos7作業系統映象

公網下載

nginx-phpfpm70:v1.0

安裝好了nginx和php中介軟體映象

離線構建

acitivty_admin:v1.0

基於中介軟體映象上面部署應用生成新的應用映象

離線構建

ü   編譯環境

       1、 準備一臺kernel 3.10以上版本的linux主機

       2、 需要在主機上面安裝docker 1.13.1軟體。

       3、 主機需要能上外網方便外網映象下載和軟體包下載

3.2    下載centos基礎映象

下面直接在編譯主機上面用docker search centos命令檢視外網映象。下載星最多的centos映象,然後用docker pull centos直接下載,最後會將映象下載到本地。


3.3   構建中介軟體映象

前面我們已經將centos7的映象檔案下載下來,現在構建中介軟體映象可以直接在基於centos映象上面安裝nginx和php-fpm軟體,最後在透過docker命令生成一個新的中介軟體映象。


  • 以下是準備好的中介軟體構建映象的dockerfile指令碼:

# 一個乾淨的centos映象

FROM centos: latest

# 映象建立者

MAINTAINER jaymarco@shsnc.com

# 在centos映象中配置php的yum源,然後安裝php相關依賴包、php-fpm軟體、php對應的擴充套件包

RUN rpm -ivh     && rpm -ivh   && \

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  

#php 效能引數最佳化配置

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/   &&\

sed -e 's/daemonize = yes/daemonize = no/' -i   /etc/opt/remi/php70/php-fpm.conf

# 配置映象時區檔案,方便映象啟動成容器後時區與本地主機一致

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime   &&\

echo 'Asia/Shanghai' >/etc/timezone

# 安裝supervisor後臺程式管理工具,方便容器啟動多程式進行後臺監控管理。

#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服務

CMD ["/startserv.sh"]


  • 配置檔案supervisord.conf,下面標紅部分屬於服務啟動配置。

[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

服務啟動指令碼 startserv.sh

#!/bin/sh

/usr/bin/supervisord   -n -c /etc/supervisord.conf

前面已經將dockerfile指令碼和配置檔案準備就緒後,接下來直接可以使用docker構建命令來構建一個新的中介軟體映象。最後也會在本地生成一個nginx-phpfpm:v1.0映象。

構建命令:

docker build –t nginx-phpfpm:v1.0 .

構建過程:

3.4   構建應用映象

部署應用映象需要準備兩份東西一份是php應用程式碼,另一份是nginx配置檔案。並將這兩份東西打包到中介軟體映象檔案中,最後會構建一個新的應用映象。

  • Nginx 配置引數

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 應用程式構建dockerfile指令碼

# 引用中介軟體映象做為應用構建基礎映象

FROM nginx-phpfpm70:v1.0

MAINTAINER

# 釋出 php 程式程式碼

ADD admin   /var/www/cecrm_acitivtycenter/admin

#nginx 效能引數最佳化

ADD admindocker.conf   /etc/nginx/conf.d/admindocker.conf

前面已經將dockerfile指令碼和配置檔案準備就緒後,接下來直接可以使用docker構建命令來構建一個新的應用映象。最後也會在本地生成一個acitivty_admin:v1.0映象。

 構建命令:

docker  build -t acitivty_admin:v1.0 .

構建過程:

我們可以看到應用映象已經構建成功

3.5   容器啟動與驗證

啟動應用容器

docker run -itd --name acitivty_admin -p 8090:8090  acitivty_admin:v1.0

檢視容器中啟動的程式,發現nginx和php-fpm程式已經成功啟動

最後我們驗證一下發布後的應用能正常訪問

有需要的朋友可以關注我的公眾號,文章每日一更


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2701375/,如需轉載,請註明出處,否則將追究法律責任。

相關文章