云计算day37

使⽤docker部署project-exam-system

  1. 背景,在⼀台主机之内,实现容器的编排,发布考试系统
  2. 环境准备
  3. docker
  4. vim /etc/docker/daemon.json
  5. docker-compos
  6. 普通的部署
  7. 镜像
  8. 前端:nginx latest服务
  9. 拉取nignx:latest镜像
  10. 测试
  11. 上传前端项⽬dist
  12. 创建启动容器
    docker run -itd -p80:80 -v
    /root/project_exam_system/web/dist:/u
    sr/share/nginx/html ngin x:latest
  13. 测试成功
  14. 出现问题,在实现登录的时候,都实现后段异常,
    原因后段还没后部署7. 登录的时候请求的域名bu.yuanyu.zhangmin,我们是
    hosts域名劫持来实现
  15. 后端的业务 jdk17 springboot 有点 不⽤单独部署
    tomcat,已经在springboot中内置tomact
  16. 准备拉取基础centos镜像
  17. Docker run -it centos:latest /bin/bash
  18. ctrl p q
  19. jdk17版本的⽂件
  20. 项⽬资源 .war. .perpreties
  21. 将在服务器上的jaav的资源⽂件上传到容器
  22. 上传jdk
    docker cp jdk... c389:/
  23. 向容器上传为服务的项⽬⽂件
    docker cp Project_exam_system.war
    c389:/
  24. 向容器上传微服务的配置⽂件
    Docker cp application.properties
    c389:/
  25. 对已经传到容器的⽂件进⾏部署docer attach c389
  26. 解压⽂件到指定的⽬录,并且跳过第⼀层⽬录
    tar -zxvf idk-17.0.....tar.gz -C
    /usr/local/jdk --strip
    components=1
  27. 测试启动微服务
    /usr/local/jdk/bin/java -jar
    Protect_exam_system.war
  28. 修改appllcaiton.properties⽂件
  29. spring.datesource.url=jdbc:msyql://你的主机
    的ip:3306/project_exam_system
  30. ctrl p q 退出
  31. 根据容器创建镜像
    docker commit 28b9 java:v0
  32. 查看镜像
    docker images
  33. 停⽤原来的容器
    docker stop 28b93. 移除原来的容器
    docker rm 28b9
  34. 根据新建的镜像,创建容器
    docker run -itd -p8080:8080 java:v0
    ```
  35. docker ps查看容器的进程
    ```
    docker ps
    ```
  36. 将java容器的终端附加到当前终端
    docker attach ref8
    ```
  37. 启动springboot微服务
    /usr/local/jdk/bin/java -jar
    Project_exam_system.war
  38. 数据持久化业务 mysq 5.7.44
  39. 拉取mysql:5.7.44
    docker pull mysql:5.7.44
  40. 上传mysql⽂件
  41. 执⾏mysql⽂件
    mysql -uroot -proot <
    project_exam_system.sql
  42. 启动mysql容器,并且映射端⼝
    docker run -itd -p3306:3306
    mysql:5.7.44
  43. 使⽤exec指令访问数据库管理界⾯
    docker exec -it cdc8 mysql -uroot -
    proot

由于在java的配置⽂件中,访问数据库的账号

和密码不是root,⽽是zhangmin
create user 'zhangmin'@'%' identified
by 'zhangmin';
grant all on *.* to 'zhangmin'@'%';
flush privileges;回顾
nmt
nginx
1.下载镜像,启动镜像,将本地的dist项⽬的⽬录挂载在容器
的/usr/share/nginx/html
2.启动服务
3.前后端分离的项⽬,并⾮所有的请求都是来⾃于同⼀个位置,
设置请求的时候还是需要在hosts⽂件中挟持域名
4.域名是固定的,但是,域名可以绑定不同的ip
mysql

  1. 各个版本都有官⽅的镜像,直接下载 docker pull msyql:5.7.44
  2. 启动容器的时候,挂载data⽬录,3. 制作data的时候,顺⼿删除auto.cnf
    tomcat
    docker run -itd -p3306:3306 -v
    /root/pes/mysql/data:/var/lib/mysql
    msyql:5.7.44
    docker run -itd -p3306:3306 -e
    MYSQL_ROOT_PASSWORD
  3. 被war包集成,所以我们直接启动war
  4. springboot 可以直接集成tomcat,build⼀个jar v包或者
    是war
  5. 我们没有安装tomcat
  6. application.properties
  7. 可以配置端⼝
  8. 配置数据库的访问
  9. 使⽤/usr/local/jdk/bin/java -jar
    Project_ExamSystem-V1.0.0.war启动,但是在启动这个任务⼀
    定要跳转到⽂件所在⽬录,因为在启动的同时,还需要加载
    applicaiton.properrties
  10. Dockerfile创建镜像,如果对象的主机上没有对应镜像,我们
    希望使⽤⼀个⽂件创建项⽬,就需要使⽤到Dockerfile,使⽤
    docker build,也需要在Dockerfile所在⽬录中执⾏docker
    build,否则找到Dockerfile也是⽆法创建制作docker-compose.yml⽂件,实现⼀键部署
    步骤:
  11. 启动nginx
    docker run -itd -p80:80 -v
    /root/pes/web/src/dist/:/usr/share/nginx/html/
    nginx:latest
  12. 启动java容器
  13. 启动mysql
    配置⾼可⽤的项⽬
  14. 先创建三个前段 nginx容器
  15. 端⼝不能映射80docker run -itd -v
    /root/pes/web/src/dist/:/usr/share/nginx/htm
    l/ nginx:latest
  16. 现在在远程是⽆法访问nginx服务,⽽且现在也不希望外部
    直接访问nginx,希望创建nginx服务的集群,这个集群被
    haproxy代理,创建三个nginx容器,创建⼀个haproxy服
    务,⽽且nginx容器还需要指定名称,web0 web1 web2因为
    如果没有名称,那么容器就⽆法被haproxy --link
  17. 启动haproxy容器 hap0
  18. 拉取haproxy镜像
    docker pull haproxy
    https://www.haproxy.com/documentation/ha
    proxy-enterprise/getting
    started/tutorials/docker
    tutorial/#sidebar
  19. 配置
    global
    daemon

nbproc 1 # pidfile /var/run/haproxy.pid

⼯作⽬录

chroot /usr/local/etc/haproxy

defaults
log 127.0.0.1 local0 err #[err
warning info debug]
mode http #默认的模
式mode { tcp|http|health },tcp是4层,http
是7层,health只会返回OK
retries 2 #两次连接
失败就认为是服务器不可⽤,也可以通过后⾯设置
option redispatch #当
serverId对应的服务器挂掉后,强制定向到其他健康
的服务器
option abortonclose #当服务器
负载很⾼的时候,⾃动结束掉当前队列处理⽐较久的链

option dontlognull #⽇志中不
记录负载均衡的⼼跳检测记录
maxconn 4096 #默认的最
⼤连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超

timeout server 30000ms #服务器超
时 #timeout check 2000 #=⼼跳检
测超时
######## 监控界⾯配置 #################
listen admin_status

监控界⾯访问信息

bind 0.0.0.0:8888
mode http

URI相对地址

stats uri /dbs

统计报告格式

stats realm Global\ statistics

登录账户信息

stats auth admin:123456
########frontend配置##############
######## mysql负载均衡配置 ###############
listen proxy-mysql
bind 0.0.0.0:3306
mode tcp

负载均衡算法

static-rr 权重, leastconn 最少连

接, source 请求IP, 轮询 roundrobin
balance roundrobin

⽇志格式

option tcplog # 在 mysql 创建⼀个没有权限的haproxy
⽤户,密码为空。 haproxy⽤户

create user 'haproxy'@'%'

identified by ''; FLUSH PRIVILEGES;
option mysql-check user haproxy

这⾥是容器中的IP地址,由于配置的是

轮询roundrobin,weight 权重其实没有⽣效
server MYSQL_1
192.168.130.100:3306 check weight 1
maxconn 2000
server MYSQL_2
192.168.130.101:3306 check weight 1
maxconn 2000
#server MYSQL_3
192.168.130.102:3306 check weight 1
maxconn 2000

使⽤keepalive检测死链

option tcpka

########################################

######## mysql负载均衡配置 ###############
listen proxy-web
bind 0.0.0.0:5000
mode http

负载均衡算法 # static-rr 权重, leastconn 最少连

接, source 请求IP, 轮询 roundrobin
balance roundrobin

⽇志格式

option tcplog

在 mysql 创建⼀个没有权限的haproxy

⽤户,密码为空。 haproxy⽤户

create user 'haproxy'@'%'

identified by ''; FLUSH PRIVILEGES;
#option mysql-check user haproxy

这⾥是容器中的IP地址,由于配置的是

轮询roundrobin,weight 权重其实没有⽣效
server web0 10.1.1.10:80 check
weight 1 maxconn 2000
server web1 10.1.1.10:81 check
weight 1 maxconn 2000
server web2 10.1.1.10:82 check
weight 1 maxconn 2000
#server MYSQL_3
192.168.130.102:3306 check weight 1
maxconn 2000

使⽤keepalive检测死链

option tcpka

########################################
#1. 在宿主机上安装了haproxy,配置,代理三个的
nginx容器中的web服务,也是直接添加容器的ip地

systemctl start haproxy
2. 创建⼀个haproxy,将配置⽂件导⼊到容器,在容器
中启动haproxy,也是可以的
docker cp
/root/pes/haproxy/haproxy.cfg 容器名
称|id:/usr/local/etc/haproxy/haproxy.
cfg

启动

haproxy -f
/usr/local/etc/haproxy/haproxy.cfg
3. 实际的使⽤haproxy容器,只需要将配置⽂件挂载到
指定的⽬录就可以docker run
-itd #交互 终端 后台
--link=web0 锚定web0
--link=web1
--link=web2
-p5000:5000
-v
#/root/pes/haproxy/haproxy.cfg:/usr/l
ocal/etc/haproxy/haproxy.cfg

将配置⽂件挂载到容器中

haproxy:latest #镜像
3. 启动
4. 代理java服务

通⽤java容器

docker stop java01
docker rm java01

开启三个java容器,名称分别为java0 java1

java2
docker run -itd --name java0 -v
/root/pes/java/src/:/java/src java:v0
docker run -itd --mane java1 -v
/root/pes/java/src/:/java/src java:v0docker run -itd --name java2 -v
/root/pes/java/src/:/java/src java:v0
#配置haproxy.cfg
listen proxy-java
bind 0.0.0.0:8080
mode http

负载均衡算法

static-rr 权重, leastconn 最少连

接, source 请求IP, 轮询 roundrobin
balance roundrobin

⽇志格式

option tcplog

在 mysql 创建⼀个没有权限的haproxy

⽤户,密码为空。 haproxy⽤户

create user 'haproxy'@'%'

identified by ''; FLUSH PRIVILEGES;
#option mysql-check user haproxy

这⾥是容器中的IP地址,由于配置的是

轮询roundrobin,weight 权重其实没有⽣效
server j0 java0:8080 check
weight 1 maxconn 2000
server j1 java1:8080 check
weight 1 maxconn 2000
server j2 java2:8080 check
weight 1 maxconn 2000#server MYSQL_3
192.168.130.102:3306 check weight 1
maxconn 2000

使⽤keepalive检测死链

option tcpka

########################################

移除haproxy容器,重新创建

docker stop hap0
docker -itd --name hap0 --link=web0 --
link=web1 --link=web2 --link=java0 --
linke=java1 --link=java2 -p8080:8080 -
p8888:8888 -p5000:5000 -v
/root/pes/haproxy/haproxy.cfg:/usr/local
/etc/haproxy/haproxy nginx:latest
5. ab压⼒测试
yum provides *bin/ab
yum -y install httpd-toolsDocker-compose⾃动化部

  1. 安装docker
    source docker.sh
  2. 安装pip
    yum -y install python2-pip
  3. 升级pippip install --upgrade pip==20.3 -i
    https://mirrors.aliyun.com/pypi/simple
  4. 安装docker-compose
    pip install docker-compose -i
    https://mirrors.aliyun.com/pypi/simple
  5. 创建pes⽬录以及⼦⽬录
    cd
    mkdir -p pes/{msyql,java,web}
  6. 在pes⽬录下创建并且编辑dockerr-compose.yml⽂件
    cd pes
    vim docker-compose.yml
    version: "3"
    servies:
    web:
    container_name: web0
    image: nginx:latest ports:
  • "80:80"
    expose:
  • 80
    volumes:
  • ./web/src/dist/:/usr/share/nginx/html/
    restart: "always"
    java:
    mysql:
  1. 添加web服务
    web:
    container_name: web0
    image: nginx:latest
    ports:
  • "80:80"
    expose:
  • 80
    volumes:
  • ./web/src/dist/:/usr/share/nginx/html/
    restart: "always"
  1. docker-compose启动集群cd pes
    docker-compose up -d
  2. docker-compose暂停集群
    cd pes
    docker-compose stop
  3. docker-compose移除容器
    docker-compose down
  4. docker-compose多开容器
    docker-compose up -d --scale web=5
相关推荐
Johny_Zhao2 小时前
Vmware workstation安装部署微软SCCM服务系统
网络·人工智能·python·sql·网络安全·信息安全·微软·云计算·shell·系统运维·sccm
国际云6 小时前
阿里云国际站与国内站的核心布局与本土化服务的选择
阿里云·云计算
小雨光6 小时前
阿里云ECS部署Dify
阿里云·云计算
亚林瓜子11 小时前
AWS Elastic Beanstalk控制台部署Spring极简工程(LB版)
spring·云计算·aws·elb·beanstalk·alb·eb
国际云,接待19 小时前
云服务器的运用自如
服务器·架构·云计算·腾讯云·量子计算
Blossom.11819 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
亚林瓜子1 天前
AWS Elastic Beanstalk控制台部署Spring极简工程
java·spring·云计算·aws·eb
小王格子1 天前
AI 编程革命:腾讯云 CodeBuddy 如何重塑开发效率?
人工智能·云计算·腾讯云·codebuddy·craft
亚林瓜子1 天前
AWS CloudTrail日志跟踪启用
云计算·aws·log·cloudtrail
独行soc1 天前
2025年渗透测试面试题总结-阿里云[实习]阿里云安全-安全工程师(题目+回答)
linux·经验分享·安全·阿里云·面试·职场和发展·云计算