基於docker構建中介軟體容器應用環境
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於Docker環境構建redis單機容器DockerRedis
- 如何構建基於 docker 的開發環境Docker開發環境
- 構建一個基於容器的開發環境開發環境
- 基於 Docker 構建統一的開發環境Docker開發環境
- 用 Docker 構建 MySQL 主從環境DockerMySql
- 用 Docker 構建 PHP 開發環境DockerPHP開發環境
- 用前端姿勢玩docker【三】基於nvm的前端環境構建技巧前端Docker
- docker構建php環境DockerPHP
- 基於openvswitch+Docker構建SDN網路測試環境 (使用ovs-docker進行構建)Docker
- docker 生產環境基礎應用Docker
- Docker 構建PHP 映象環境DockerPHP
- 用前端姿勢玩docker【四】基於docker快速構建webpack的開發與生產環境前端DockerWeb
- 基於 Docker for MAC 的 Kubernetes 本地環境搭建與應用部署DockerMac
- 基於 Vagrant 構建 PHP 開發環境PHP開發環境
- Docker折騰記: (2)基於docker-compose構建yapi容器DockerAPI
- 從零構建一個基於Docker的Laravel應用DockerLaravel
- Docker構建redis叢集環境DockerRedis
- 基於Docker應用容器日誌檔案收集Docker
- 基於CentOS7映象容器的MySQL環境構築CentOSMySql
- websocketd | 基於 docker 構建WebDocker
- docker 靈活的構建 PHP 環境DockerPHP
- 基於 GitLab CI 搭建前端自動構建環境Gitlab前端
- 基於GitLab CI搭建Golang自動構建環境GitlabGolang
- 體驗有禮:基於ECS快速搭建Docker環境Docker
- 基於ECS快速搭建Docker環境Docker
- Java應用在docker環境配置容器健康檢查JavaDocker
- docker 入門講解 - 構建本地環境Docker
- Linux 上部署 docker,基於 docker 搭建 lnmp 環境LinuxDockerLNMP
- docker中介軟體搭建Docker
- 基於Docker的LNMP開發環境DockerLNMP開發環境
- 如何基於 Redis 構建應用程式元件Redis元件
- 基於 EventBridge 構建 SaaS 應用整合方案
- 環繞中介軟體
- Docker 構建統一的前端開發環境Docker前端開發環境
- 企業應用架構研究系列十九:Docker開發環境應用架構Docker開發環境
- Docker容器 關於映象構建的安全問題Docker
- 在生產環境使用Docker部署應用Docker
- docker(podman)容器設定中文環境Docker