使用docker集群部署web应用

1.环境准备
准备两个及以上的linux系统,先关闭防火墙与selinux安全策略

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vi /etc/sysconfig/selinux  修改SELINUX=disabled

2.在每个节点上安装docker
(1)上传压缩包 docker-18.09.8.tgz至虚拟机,解压

tar -xvf docker-18.09.8.tgz

(2)将解压出来的docker文件内容移动到 /usr/bin/ 目录下

cp docker/* /usr/bin/

(3)将docker注册为service

vim /etc/systemd/system/docker.service

将下面的配置复制到docker.service中

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
 
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
 
[Install]
WantedBy=multi-user.target

(4)启动
添加文件权限并启动docker

chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl start docker			#启动Docker
systemctl enable docker.service			#设置开机自启
systemctl status docker			#查看Docker状态
docker -v			#查看Docker版本

3.搭建集群
(1)创建集群,设置主节点

docker swarm init --advertise-addr 192.168.100.60
<!--初始化集群将192.168.100.60设置为主节点-->

运行后会出现如下图所示信息
在这里插入图片描述
(2)添加工作节点
在其它节点上运行上图中docker swarm join --token…就可以作为工作节点加入集群。注意各个节点的时间要一致,否则无法正常搭建集群。
(3)查看集群节点信息
进入管理节点所在虚拟机,查看集群信息

docker node ls

4.部署NFS服务端
使用的nfs文件下载https://download.csdn.net/download/weixin_42302996/77866850
将60主节点作为服务端
(1)将nfs安装文件上传到60的/home/nfs
(2)进入目录,安装文件

rpm -ivh *.rpm --force --nodeps

(3)在60、 61 创建共享文件夹mkdir -p /storage
(4)配置nfs
编辑配置文件vi /etc/exports
添加以下内容,将客户端的ip地址配置到服务端

/storage 192.168.100.61(rw,no_root_squash)

加载配置文件exportfs -arv

设置开机自启:

systemctl enable rpcbind.service
systemctl enable nfs-server.service

启动:

systemctl start rpcbind.service
systemctl start nfs-server.service

5.部署NFS客户端
将61work节点作为客户端,对客户端进行以下部署
(1)将nfs安装文件上传到61的/home/nfs
(2)进入目录,安装文件

rpm -ivh *.rpm --force --nodeps

(3)创建共享文件夹mkdir -p /storage

(4)启动
开机自启

systemctl enable rpcbind.service
systemctl enable nfs-server.service

启动:

systemctl start rpcbind.service
systemctl start nfs-server.service

(5)nfs挂载
服务器共享文件夹/本地共享文件夹

mount -t nfs 192.168.100.60:/storage   /storage

测试能否挂载showmount -e 192.168.100.60
注意虚拟机关机重启以后挂载失效,需要重新挂载。
在这里插入图片描述
(6)验证
向一个节点的/storage下存放文件,查看其它节点的/storage是否同步

6.搭建私服stack
(1)修改host文件
vi /etc/hosts 在每个节点上增加配置

192.168.100.60 www.master.com

(2)拉取或者load私有仓库镜像registry:2到主节点
(3)编辑compose文件registry.yml

version: '3.7'

services:

  registry:
    image: registry:2
    ports:
      - 5000:5000
    volumes:
      - /storage/registry:/var/lib/registry
    networks:
      - default
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  default:
<!-- replicas: 1表示该服务最多只启动一份;node.role == manager表示该服务只启动在manager标签的节点上;volumes表示将卷映射到宿主机 -->

(4)给主节点添加标签

docker node update --label-add role=标签  节点ID

(5)运行私有仓库栈registry

docker stack deploy --with-registry-auth --compose-file  registry.yml registry

(6)查看栈

docker stack ls 

(7)让docker节点信任该私服 vi /etc/docker/daemon.json

  { "insecure-registries":["www.master.com:5000"] }
  <!--没有目录自己创建-->

(8)向私服上传镜像
例如将主节点cc8775c0fe94mysql镜像上传到私服
先打一个标签:

docker tag cc8775c0fe94  www.master.com:5000/mysql:5.6

推送

 docker push www.master.com:5000/mysql:5.6

推送后其它节点就可以从私服拉取该镜像

docker pull www.master.com:5000/mysql:5.6

7.搭建web应用stack
这里需要搭建一个tomcat的web应用服务和一个mysql数据库服务。第一步先构建web应用镜像
(1)构建镜像,准备web应用war包和tomcat镜像,使用他们构建一个web应用镜像。
编辑Dockerfile文件

FROM tomcat:8.5.15-jre8

RUN rm -rf webapps/ROOT && mkdir webapps/ROOT

ADD nplm.war /app.zip

COPY ./simsun.ttc /usr/share/fonts

RUN cd webapps/ROOT && unzip /app.zip && rm -rf /app.zip

<!--
//FROM的意思根据那个基础镜像构建镜像,我们根据tomcat:8.5.15-jre8镜像构建,里面有tomcat
//ADD nplm.war /app.zip是把nplm.war加入到镜像内并命名为app.zip
//因为该web应用需要用到一些镜像内没有的字体,所以把当前目录的字体文件simsun.ttc复制到镜像/usr/share/fonts下
//cd webapps/ROOT && unzip /app.zip  把应用解压到了镜像的webapps/ROOT目录下
-->

根据基础镜像构建镜像nplm

docker build -t nplm .

(2)上传镜像到私服

构建完镜像后,将web应用镜像与mysql镜像上传至私服

docker tag nplm  www.master.com:5000/nplm
docker push www.master.com:5000/nplm

docker tag mysql5.6  www.master.com:5000/mysql5.6
docker push www.master.com:5000/mysql5.6

(3)编辑compose文件nplm.yml

version: "3.7"
services:
  mysql:
    image: www.master.com:5000/mysql5.6
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - /stoarge/mysql:/var/lib/mysql
      - /stoarge/initdb:/docker-entrypoint-initdb.d
    deploy:
      mode: replicated
      replicas: 1
    networks:
      - default

  tomcat:
    image: www.master.com:5000/nplm
    environment:
      TZ: Asia/Shanghai
    ports:
      - 8080:8080
    volumes:
      - /storage/nplm:/nplm
      - /storage/hed/deploy.properties:/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/deploy.properties
    deploy:
      mode: replicated
      replicas: 1
    networks:
      - default
networks:
  default:
  <!-- 可以将数据库初始化sql文件放到 /stoarge/initdb服务启动时会自动执行;注意deploy.properties文件的配置中mysql的host就是服务名mysql-->

(4)运行stack

docker stack deploy --with-registry-auth --compose-file  nplm.yml  nplm
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值