docker centos
docker pull nginx
docker pull tomcat
下载jdk、tomcat压缩包,修改tomcat配置文件Content.xml和server.xml,编写Dockerfile重新构建
FROM centos:latest
MAINTAINER [email protected]
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
安装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-1.18.0.tar.gz,进入nginx目录
./configure
yum install -y pcre-devel zlib-devel
make && make install
进入/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;
#代理的地址
}
下载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.hostnamemanager-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方式管理集群内所有资源