经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Nginx » 查看文章
使用supervisor管理nginx+tomcat容器的方法示例
来源:jb51  时间:2019/3/18 8:40:25  对本文有异议

需求:

使用docker来启动nginx + tomcat 双进程,实际应用中,多进程还是比较常见的。

1: 创建dockerfile目录

  1. mkdir -p /docker/web

2: 编写dockerfile: /docker/web/Dockerfile

  1. FROM centos7
  2.  
  3. MAINTAINER lin test@163.com
  4.  
  5. COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
  6.  
  7. COPY nginx_install.sh /tmp/nginx_install.sh
  8.  
  9. RUN sh /tmp/nginx_install.sh; \rm -rf /usr/local/src/*
  10.  
  11. RUN sed -i -e '/worker_processes/a daemon off;' /usr/local/nginx/conf/nginx.conf;
  12.  
  13.  
  14. COPY jdk-8u162-linux-x64.tar.gz /usr/local/src/jdk-8u162-linux-x64.tar.gz
  15.  
  16. COPY tomcat_install.sh /tmp/tomcat_install.sh
  17.  
  18. RUN sh /tmp/tomcat_install.sh; \rm -rf /usr/local/src/*
  19.  
  20.  
  21. COPY supervisor_install.sh /tmp/supervisor_install.sh
  22.  
  23. COPY supervisord.conf /etc/supervisord.conf
  24.  
  25. COPY start_tomcat.sh /usr/local/tomcat/bin/mystart.sh
  26.  
  27. RUN sh /tmp/supervisor_install.sh; \rm -rf /tmp/*.sh

3: dockerfile集成的配置文件及安装文件

3.1 默认源下载较慢,更换yum源,以下CentOS-Base.repo配置文件拷贝到容器里更换

  1. COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
  2.  
  3. [root@docker web]# cat CentOS-Base.repo
  4.  
  5. [base]
  6.  
  7. name=CentOS-$releasever - Base
  8.  
  9. baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
  10.  
  11. gpgcheck=1
  12.  
  13. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  14.  
  15.  
  16. #released updates
  17.  
  18. [updates]
  19.  
  20. name=CentOS-$releasever - Updates
  21.  
  22. baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
  23.  
  24. gpgcheck=1
  25.  
  26. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  27.  
  28.  
  29. #additional packages that may be useful
  30.  
  31. [extras]
  32.  
  33. name=CentOS-$releasever - Extras
  34.  
  35. baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
  36.  
  37. gpgcheck=1
  38.  
  39. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  40.  
  41.  
  42. #additional packages that extend functionality of existing packages
  43.  
  44. [centosplus]
  45.  
  46. name=CentOS-$releasever - Plus
  47.  
  48. baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
  49.  
  50. gpgcheck=1
  51.  
  52. enabled=0
  53.  
  54. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

3.2nginx安装脚本

  1. [root@docker web]# cat nginx_install.sh
  2.  
  3. yum install -y wget tar gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
  4.  
  5.  
  6. cd /usr/local/src
  7.  
  8. wget 'http://nginx.org/download/nginx-1.12.2.tar.gz'
  9.  
  10. tar -zxvf nginx-1.12.2.tar.gz
  11.  
  12. cd nginx-1.12.2
  13.  
  14. ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-stream_ssl_module
  15.  
  16. make
  17.  
  18. make install
  19.  
  20. exit 0

3.3tomcat安装脚本

  1. [root@docker web]# cat tomcat_install.sh
  2.  
  3. yum install -y wget tar
  4.  
  5. cd /usr/local/src/
  6.  
  7. tar -zxvf jdk-8u162-linux-x64.tar.gz
  8.  
  9. mv jdk1.8.0_162 /usr/local/
  10.  
  11. #/usr/local/jdk1.8.0_162/bin/java -version
  12.  
  13.  
  14. #配置java环境变量
  15.  
  16. echo 'JAVA_HOME=/usr/local/jdk1.8.0_162/' >>/etc/profile
  17.  
  18. echo 'PATH=$PATH:$JAVA_HOME/bin' >>/etc/profile
  19.  
  20. echo 'CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH' >>/etc/profile
  21.  
  22. source /etc/profile
  23.  
  24.  
  25. wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz
  26.  
  27. tar -zxvf apache-tomcat-8.5.38.tar.gz
  28.  
  29. mv apache-tomcat-8.5.38 /usr/local/tomcat

3.4dockerfile文件中涉及到的配置文件、脚本、安装包如下

  1. [root@docker web]# ll
  2.  
  3. total 185384
  4.  
  5. -rw-r--r-- 1 root root 835 Mar 9 01:12 CentOS-Base.repo
  6.  
  7. -rw-r--r-- 1 root root 669 Mar 9 01:11 Dockerfile
  8.  
  9. -rw-r--r-- 1 root root 189815615 Mar 9 01:15 jdk-8u162-linux-x64.tar.gz
  10.  
  11. -rw-r--r-- 1 root root 340 Mar 9 01:13 nginx_install.sh
  12.  
  13. -rw-r--r-- 1 root root 581 Mar 9 01:17 tomcat_install.sh

4: 一键安装supervisor: /docker/web/supervisor_install.sh

  1. yum -y install epel-release
  2. yum -y install python2-pip
  3. pip install supervisor

5: supervisor配置文件: /docker/web/supervisord.conf

  1. [unix_http_server]
  2.  
  3. file=/tmp/supervisor.sock ; the path to the socket file
  4.  
  5.  
  6. [supervisord]
  7.  
  8. logfile=/tmp/supervisord.log ; 日志
  9.  
  10. logfile_maxbytes=50MB ; 最大50M日志
  11.  
  12. logfile_backups=10 ; 轮循日志备份10
  13.  
  14. loglevel=info ; 日志等级记录info
  15.  
  16. pidfile=/tmp/supervisord.pid ;pid
  17.  
  18. nodaemon=true ;在前台启动
  19.  
  20. minfds=102400 ; 文件描述符限制
  21.  
  22. minprocs=2000 ; 进程数
  23.  
  24.  
  25. [rpcinterface:supervisor]
  26.  
  27. supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
  28.  
  29.  
  30. [supervisorctl]
  31.  
  32. serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
  33.  
  34.  
  35. [program:nginx]
  36.  
  37. command=/usr/local/nginx/sbin/nginx ; 前台启动nginx
  38.  
  39. autostart=true ; 随着supervisor自动启动
  40.  
  41. startsecs=10 ; 启动10s后算正常启动
  42.  
  43. autorestart=true ; 程序退出后自动重启
  44.  
  45. startretries=3 ; 启动失败自动重试次数
  46.  
  47. stdout_logfile_maxbytes=20MB ;stdout 日志文件大小最大20Mb
  48.  
  49. stdout_logfile=/usr/local/nginx/logs/out.log
  50.  
  51.  
  52. [program:tomcat]
  53.  
  54. command=sh /usr/local/tomcat/bin/mystart.sh ; 前台启动tomcat
  55.  
  56. autostart=true ; 随着supervisor自动启动
  57.  
  58. startsecs=10 ; 启动10s后算正常启动
  59.  
  60. autorestart=true ; 程序退出后自动重启
  61.  
  62. startretries=3 ; 启动失败自动重试次数
  63.  
  64. stdout_logfile_maxbytes=20MB ;stdout 日志文件大小最大20Mb
  65.  
  66. stdout_logfile=/usr/local/tomcat/logs/catalina.out

6: tomcat的启动脚本/docker/web/start_tomcat.sh

  1. #由于supervisor无法使用source,需要编写个脚本来启动
  2.  
  3. source /etc/profile
  4.  
  5. /usr/local/tomcat/bin/catalina.sh run

7: 构建镜像

  1. cd /docker/web
  2. docker build -t shijiange_web .
  3.  
  4. [root@docker web]# docker images
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. shijiange_web latest bc06a9974252 7 seconds ago 1.33 GB

8: 启动容器测试

  1. [root@docker web]# docker run -d shijiange_web /bin/bash -c 'supervisord -c /etc/supervisord.conf'
  2.  
  3. 76782ab71c3b1d2f818ad76214d6336ae11a524eeb9d211f154fe4ad5226015d
  4.  
  5. [root@docker web]#
  6.  
  7. [root@docker web]# docker ps
  8.  
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10.  
  11. 76782ab71c3b shijiange_web "container-entrypo..." 12 seconds ago Up 12 seconds happy_jones

9.测试验证:

  1. [root@docker web]# docker exec -it 76782ab /bin/bash
  2. bash-4.2# ifconfig

10.容器验证:curl nginx

11.容器验证:curl tomcat

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号