使用supervisor管理nginx+tomcat容器的方法示例

需求:

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

1: 创建dockerfile目录

mkdir -p /docker/web

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

FROM centos7

MAINTAINER lin test@163.com

COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo

COPY nginx_install.sh /tmp/nginx_install.sh

RUN sh /tmp/nginx_install.sh; \rm -rf /usr/local/src/*

RUN sed -i -e '/worker_processes/a daemon off;' /usr/local/nginx/conf/nginx.conf;

COPY jdk-8u162-linux-x64.tar.gz /usr/local/src/jdk-8u162-linux-x64.tar.gz

COPY tomcat_install.sh /tmp/tomcat_install.sh

RUN sh /tmp/tomcat_install.sh; \rm -rf /usr/local/src/*

COPY supervisor_install.sh /tmp/supervisor_install.sh

COPY supervisord.conf /etc/supervisord.conf

COPY start_tomcat.sh /usr/local/tomcat/bin/mystart.sh

RUN sh /tmp/supervisor_install.sh; \rm -rf /tmp/*.sh

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

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

COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo

[root@docker web]# cat CentOS-Base.repo 

[base]

name=CentOS-$releasever - Base

baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates

[updates]

name=CentOS-$releasever - Updates

baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful

[extras]

name=CentOS-$releasever - Extras

baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages

[centosplus]

name=CentOS-$releasever - Plus

baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

3.2nginx安装脚本

[root@docker web]# cat nginx_install.sh 

yum install -y wget tar gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

cd /usr/local/src

wget 'http://nginx.org/download/nginx-1.12.2.tar.gz'

tar -zxvf nginx-1.12.2.tar.gz

cd nginx-1.12.2

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-stream_ssl_module

make

make install

exit 0

3.3tomcat安装脚本

[root@docker web]# cat tomcat_install.sh 

yum install -y wget tar

cd /usr/local/src/

tar -zxvf jdk-8u162-linux-x64.tar.gz

mv jdk1.8.0_162 /usr/local/

#/usr/local/jdk1.8.0_162/bin/java -version

#配置java环境变量

echo 'JAVA_HOME=/usr/local/jdk1.8.0_162/' >>/etc/profile

echo 'PATH=$PATH:$JAVA_HOME/bin' >>/etc/profile

echo 'CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH' >>/etc/profile

source /etc/profile

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz

tar -zxvf apache-tomcat-8.5.38.tar.gz

mv apache-tomcat-8.5.38 /usr/local/tomcat

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

[root@docker web]# ll

total 185384

-rw-r--r-- 1 root root 835 Mar 9 01:12 CentOS-Base.repo

-rw-r--r-- 1 root root 669 Mar 9 01:11 Dockerfile

-rw-r--r-- 1 root root 189815615 Mar 9 01:15 jdk-8u162-linux-x64.tar.gz

-rw-r--r-- 1 root root 340 Mar 9 01:13 nginx_install.sh

-rw-r--r-- 1 root root 581 Mar 9 01:17 tomcat_install.sh

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

yum -y install epel-release
yum -y install python2-pip
pip install supervisor

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

[unix_http_server]

file=/tmp/supervisor.sock ; the path to the socket file

[supervisord]

logfile=/tmp/supervisord.log ; 日志

logfile_maxbytes=50MB ; 最大50M日志

logfile_backups=10 ; 轮循日志备份10个

loglevel=info ; 日志等级记录info的

pidfile=/tmp/supervisord.pid ;pid

nodaemon=true ;在前台启动

minfds=102400 ; 文件描述符限制

minprocs=2000 ; 进程数

[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:nginx]

command=/usr/local/nginx/sbin/nginx ; 前台启动nginx

autostart=true ; 随着supervisor自动启动

startsecs=10 ; 启动10s后算正常启动

autorestart=true ; 程序退出后自动重启

startretries=3 ; 启动失败自动重试次数

stdout_logfile_maxbytes=20MB ;stdout 日志文件大小最大20Mb

stdout_logfile=/usr/local/nginx/logs/out.log

[program:tomcat]

command=sh /usr/local/tomcat/bin/mystart.sh ; 前台启动tomcat

autostart=true ; 随着supervisor自动启动

startsecs=10 ; 启动10s后算正常启动

autorestart=true ; 程序退出后自动重启

startretries=3 ; 启动失败自动重试次数

stdout_logfile_maxbytes=20MB ;stdout 日志文件大小最大20Mb

stdout_logfile=/usr/local/tomcat/logs/catalina.out

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

#由于supervisor无法使用source,需要编写个脚本来启动

source /etc/profile

/usr/local/tomcat/bin/catalina.sh run

7: 构建镜像

cd /docker/web
docker build -t shijiange_web .

[root@docker web]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
shijiange_web latest bc06a9974252 7 seconds ago 1.33 GB

8: 启动容器测试

[root@docker web]# docker run -d shijiange_web /bin/bash -c 'supervisord -c /etc/supervisord.conf'

76782ab71c3b1d2f818ad76214d6336ae11a524eeb9d211f154fe4ad5226015d

[root@docker web]# 

[root@docker web]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

76782ab71c3b shijiange_web "container-entrypo..." 12 seconds ago Up 12 seconds happy_jones

9.测试验证:

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

10.容器验证:curl nginx

11.容器验证:curl tomcat

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

(0)

相关推荐

  • Tomcat支持https访问的步骤讲解

    如何让tomcat支持https访问呢 步骤: (1)生成keystore文件 命令:keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat22.keystore 生成的文件 就是:tomcat22.keystore (2)把keystore 文件放在conf目录下 (3)修改server.xml文件 添加: <Connector port="80" protoc

  • 详解关于tomcat切割catalina.out日志的三种方式

    1.log4j进行日志切分 1)准备三个包:log4j-1.2.17.jar      tomcat-juli.jar      tomcat-juli-adapters.jar 放到tomcat的lib目录或者是工程的WEB_INF/lib下, 2)在lib目录下新建log4j.properties,加入以下内容 log4j.rootLogger = INFO, CATALINA # Define all the appenders log4j.appender.CATALINA = org.

  • Tomcat使用IDEA远程Debug调试的讲解

    Tomcat运行环境:CentOS6.5.Tomcat7.0.IDEA 远程Tomcat设置 1.在tomcat/bin下的catalina.sh上边添加下边的一段设置 CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=60222,suspend=n,server=y" 2.address=60222 这个是后边IDEA设置的时候需要用到的调试端口,可以任意设置一个未使用的端口,但是后边的配置都要一致. IDEA设

  • Linux下Tomcat的几种运行方式讲解

    Linux下Tomcat的启动.关闭 在Linux系统下,启动和关闭Tomcat使用命令操作. 进入Tomcat下的bin目录 cd /java/tomcat/bin 启动Tomcat命令 ./startup.sh 停止Tomcat服务命令 ./shutdown.sh 执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访问了,但是ps -ef | grep tomcat 后,发现tomcat对应的java进程未随web容器关闭而销毁,进而存在僵尸java进程.网上看了

  • Centos7.5配置java环境安装tomcat的讲解

    Tomcat是基于java语言的web服务器软件,本文主要介绍如何在centos7.5上配置java环境并安装tomcat 1.安装Java环境: 访问orcal官网下载JDK rpm包:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载完成后执行:rpm -ivh jdk-8u161-linux-x64.rpm进行安装,默认会安装到/usr/java目录下 安装完成后,修

  • Tomcat7.0设置虚拟目录配置虚拟路径的方法讲解

    Tomcat7.0设置虚拟目录 (1)目前,我们的网站站点都是放在默认的目录下:tomcat/webapps/下的.但是,在某种情况下,我们需要把站点放到其他的目录,比如:tomcat所在磁盘的空间不足: 或者为了项目的统一管理,希望放在某个特定的目录下而不是默认的目录. (2)那么我们就是用今天的方法解决这个问题(同样是修改config/server.xml文件): (3)按照下边的图片找到server.xml文件(config-----server.xml记事本打开即可) (4)打开之后拉到

  • Tomcat中的Connector配置讲解

    JBoss使用Tomcat作为Web容器,因此在JBoss中对于Web容器的配置也类似于在Tomcat中的配置,主要就是对于 server.xml文件的编辑,在JBoss 5.x中,这个文件位于${JBOSS.HOME}\server\${confifure}\deploy\jbossweb.sar下,其中 configure的值可以是all, default,web,standard, minimal等.下面的代码展示了一个JBoss default配置下的server.xml,由于篇幅原因,

  • Tomcat+Mysql高并发配置优化讲解

    1.Tomcat优化配置 (1)更改Tomcat的catalina.bat 将java变成server模式,增大jvm的内存,在文件开始位置增加 setJAVA_OPTS=-server -Xms1024m -Xmx2048m -Xss512K -XX:PermSize=128m-XX:MaxPermSize=256m setCATALINA_OPTS=-server -Xms512m -Xmx512m 如下图: Xms:初始内存 Xmx:最大内存 (2)更改Tomcat的Server.xml

  • Tomcat默认程序发布路径的使用与修改方法讲解

    tomcat7默认的程序发布路径为tomcat/webapps/ROOT/下面. 例子 比如我在tomcat/webapps/ROOT/路径下新建一个jsp文件,则可以直接通过URL为: http://localhost:8080/index.jsp 来访问. 再比如我做文件的上传和下载功能时,可以在ROOT下新建一个FileUpload文件夹,把上传文件的路径设为这个文件夹下,然后上传一个文件test.txt:做下载功能时,点击该文件的下载按钮,可以直接让网页打开一个URL: http://l

  • Tomcat使用Log4j输出catalina.out日志

    Tomcat默认的日志是用java.util.logging,有几点不足,文件catalian.out不能像log4j一样按天生成,将越来越大.日志格式和项目中用log4j打出来的不一致,不利于解析. 从tomcat官网(https://tomcat.apache.org/tomcat-7.0-doc/logging.html)上找了下,修改一些配置.替换扩展包即可使用log4j输出catalian.out. 在$CATALINA_BASE/lib下创建log4j.properties文件 lo

随机推荐