docker-compose之Nginx+Tomcat代理配置
Tomcat镜像制作与启动
Dockerfile如下
FROM docker.io/sssllc/centos7.2-jdk1.8 #update RUN yum -y update; yum clean all && yum install -y wget unzip tar net-tools #install jdk && tomcat #ADD jdk-8u151-linux-x64.tar.gz /usr/local/ #原始镜像不存在jdk环境是使用(上下文有这个文件存在) ADD tomcat7.tar.gz /usr/local/ #设置环境变量 #ENV JAVA_HOME /usr/local/jdk1.8.0_151 #如果有jdk环境的话略过 #ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.82 ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.82 #ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin ENV LC_ALL en_US.UTF-8 #防止乱码 EXPOSE 8080 CMD /usr/local/apache-tomcat-7.0.82/bin/catalina.sh run
build镜像
docker build -t tomcat7 .
启动tomcat并将镜像push到私有仓库
//启动 docker run -itd -p 8090:8080 --name tomcat1 -v /data/admin-web/:/data/webapp tomcat7 #/data/webapp为tomcat代码发布目录 //push到私有仓库 docker tag tomcat7 10.10.10.12/hztest/tomcat7-jdk1.8 #首先打标签 docker push 10.10.10.12/hztest/tomcat7-jdk1.8
nginx镜像配置
pull原始镜像
docker pull registry.cn-hangzhou.aliyuncs.com/kkf_centos7/nginx
自定义镜像,dockerfile如下
FROM registry.cn-hangzhou.aliyuncs.com/kkf_centos7/nginx COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80
nginx.conf如下
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; keepalive_timeout 65; types_hash_max_size 2048; gzip on; #include /etc/nginx/conf.d/*.conf;
#负载均衡,下面的tomcat01和tomcat02为nginx连接tomcat容器时给容器设置的别名的名称,即配置文件写啥名,link指定的别名就为啥名 upstream tomcat_client { server tomcat01:8080 weight=1; server tomcat02:8080 weight=1; } server { server_name ""; listen 80 default_server; listen [::]:80 default_server ipv6only=on; location / { proxy_pass http://tomcat_client; #反向代理 proxy_redirect default; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } }
build 打包并push到私有仓库
docker build -t nginx .
docker tag nginx 10.10.10.12/hztest/nginx docker push 10.10.10.12/hztest/nginx
启动所有容器
#注意:如果需要查看日志,需要加上log目录的映射,log目录查看dockerfile和nginx配置文件即可得到
//启动tomcat容器(两个) docker run -itd -p 8090:8080 --name tomcat1 -v /data/admin-web/:/data/webapp tomcat7 docker run -itd -p 8091:8080 --name tomcat2 -v /data/admin-web/:/data/webapp tomcat7 //启动nginx容器,指定--link,会在nginx的容器hosts文件里生成一条tomcat容器的host记录,格式为 tomcat1容器ip 容器名(tomcat1) 容器别名(tomcat02) tomcat容器主机名(containerid) docker run --name nginx --link=tomcat1:tomcat01 --link=tomcat2:tomcat02 -p 80:80 -idt nginx #link下 第一个tomcat1为 tomcat1容器的容器名,第二个tomcat1为此容器的别名。在nginx配置文件里指定的别名
docker-compose
创建docker-compose.yml文件
version: '2' services: nginx1: container_name: nginx image: 10.10.10.12/hztest/nginx links: #links这里tomcat1为容器名,tomcat01为tomcat1的别名。nginx连接tomcat1的配置文件里,写tomcat01即可 - tomcat1:tomcat01 - tomcat2:tomcat02 ports: - "80:80" volumes: - /data/logs/nginx:/var/log/nginx/ depends_on: #依赖redis启动才能启动tomcat,可忽略 - tomcat01 - tomcat02 restart: always tomcat1: container_name: tomcat1 image: 10.10.10.12/hztest/tomcat7-jdk1.8 ports: - "8081:8080" volumes: - /data/admin-web:/data/webapp - /data/logs/admin/tomcat1:/usr/local/apache-tomcat-7.0.82/logs environment: TOMCAT_SERVER_ID: tomcat_server_001 depends_on: #依赖redis起来后才能启动tomcat,如果没有可忽略 - redis restart: always tomcat2: container_name: tomcat2 image: 10.10.10.12/hztest/tomcat7-jdk1.8 ports: - "8082:8080" volumes: - /data/admin-web:/data/webapp - /data/logs/admin/tomcat2:/usr/local/apache-tomcat-7.0.82/logs environment: TOMCAT_SERVER_ID: tomcat_server_002 depends_on: #依赖redis起来后才能启动tomcat,如果没有可忽略 - redis - rabbitmq - mongodb restart: always
启动
docker-compose up #前台启动 docker-compose up -d #后台启动
docker-compose restart #重启