docker+nginx+tomcat+portainer部署Web项目

2 篇文章 0 订阅
2 篇文章 0 订阅

准备镜像

docker centos
docker pull nginx
docker pull tomcat

构建tomcat镜像

下载jdk、tomcat压缩包,修改tomcat配置文件Content.xml和server.xml,编写Dockerfile重新构建

FROM centos:latest
MAINTAINER quandonglei@126.com

COPY readme.txt /usr/local/readme.txt
ADD jdk-8u281-linux-x64.tar.gz /usr/local/
ADD tomcat7.tar.gz /usr/local/

RUN yum install -y vim
RUN yum install -y net-tools

ENV mypath /usr/local
WORKDIR $mypath

ENV JAVA_HOME /usr/local/jdk1.8.0_281
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat7
ENV CATALINA_BASE /usr/local/tomcat7
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/tomcat7/bin/startup.sh && tail -F /usr/local/tomcat7/logs/catalina.out

准备3台以上服务器

安装docker swarm环境,将所有服务器加入集群环境(至少3台机器作为主节点)

创建tomcat nfs共享目录

yum install -y nfs-utils rpcbind

启动nfs服务

systemctl enable rpcbind
systemctl start rpcbind
systemctl enable nfs-server
systemctl start nfs-server

mkdir /sharedata

chmod -R 777 /sharedata

vi /etc/exports
/sharedata [ip](rw,async,insecure,anonuid=1000,anongid=1000,no_root_squash)

创建docker volume链接nfs共享服务器

docker volume create --driver local \
  --opt type=nfs \
  --opt o=addr=[ip],rw \
  --opt device=:/sharedata \
  nfs-tomcat

–opt o=addr=10.20.1.9 NFS服务器地址
–opt device=:/root/share 指向共享目录,也可以是共享目录下的子目录

创建服务网络

docker network create --driver overlay tomcat-net

创建tomcat服务

docker service create -p 8080:8080 --replicas=2 --name tomcat-cluster --mount src=nfs-tomcat,dst=/usr/local/tomcat/webapps tomcat:latest

–replicas=2创建两个副本
–name tomcat-cluster服务名称
–mount src=nfs-tomcat,dst=/usr/local/tomcat/webapps挂载nfs

弹性伸缩扩展容器服务副本

docker service scale tomcat-cluster=[num]

容器副本内部ip分布通常为每两个副本为一个ip

安装nginx

解压缩nginx-1.18.0.tar.gz,进入nginx目录

./configure
yum install -y pcre-devel zlib-devel
make && make install

配置nginx

进入/usr/local/nginx

cd /usr/local/nginx
vim conf/nginx.conf
upstream tomcat01 {
    ip_hash;
    server 172.18.0.3:8080;
    server 172.18.0.4:8080;
}
upstream tomcat02 {
    ip_hash;
    server 172.18.0.5:8080;
    server 172.18.0.6:8080;
}
server {
    listen       80;
    server_name  192.168.149.12;
    server 192.168.149.12:8081;


    location / {
        if ($remote_addr ~ "192.168.149.129")
        {
            proxy_pass http://tomcat02;
            break;
        }
        proxy_pass http://tomcat01;
        #代理的地址
    }

  • nginx负载均衡upstream地址配置必须为容器内部ip端口
  • 负载均衡暂时采用ip_hash解决session共享问题
  • 集群内所有服务器地址均可访问容器服务

部署portainer可视化容器管理

下载portainer镜像

docker pull portainer/portainer

创建数据卷

docker volume create portainerdata

创建网络

docker network create --driver overlay --attachable portainer_agent_network

创建portainer代理服务

docker service create \ --name portainer_agent \ --network portainer_agent_network \ --mode global \ --constraint 'node.platform.os == linux' \ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \ --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \ portainer/agent

创建portainer服务

docker service create --name portainer --network portainer_agent_network -p 9000:9000 --constraint 'node.role==manager' --constraint node.hostname==centos7-01 --container-label com.docker.stack.namespace=portainer --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock --mount type=volume,src=portainerdata,dst=/data portainer/portainer -H unix:///var/run/docker.sock
  • 参数说明:

–publish 9000:9000 :宿主机9000端口映射容器中的9000端口
–mount type=bind /var/run/docker.sock:/var/run/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中;
–mount type=volume portainer_data:/data :把宿主机portainer_data数据卷挂载到容器/data目录;
–constraint node.rolemanager 指定容器运行在管理节点上.
–constraint node.hostname
manager-node 指定容器运行在管理节点manager-node上.
–container-label com.docker.stack.namespace=portainer 是为了prometheus+grafana能通过stack标签查看监控数据,建议今后不以stack方式部署的服务都加上com.docker.stack.namespace标签

  • 注意:

–constraint node.hostname==[主管理节点hostname]
–replicas只能启动一个副本
进入仪表盘控制台默认为主管理节点资源,可通过添加EndPoint,以agent方式管理集群内所有资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mariopq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值