云计算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
相关推荐
AKAMAI6 小时前
跳过复杂环节:Akamai应用平台让Kubernetes生产就绪——现已正式发布
人工智能·云原生·云计算
天翼云开发者社区8 小时前
Rust 中的 Tokio 线程同步机制
云计算
天翼云开发者社区11 小时前
亮相2025年服贸会,天翼云打造高质量算力服务新生态!
云计算·天翼云
容器魔方2 天前
Bloomberg 正式加入 Karmada 用户组!
云原生·容器·云计算
AKAMAI3 天前
Sport Network 凭借 Akamai 实现卓越成就
人工智能·云原生·云计算
10岁的博客3 天前
《云计算如何驱动企业数字化转型:关键技术与实践案例》
云计算
m0_694845574 天前
教你使用服务器如何搭建数据库
linux·运维·服务器·数据库·云计算
shinelord明4 天前
【数据行业发展】可信数据空间~数据价值的新型基础设施
大数据·架构·云计算·创业创新
XINVRY-FPGA4 天前
XCKU15P-2FFVA1760I AMD 赛灵思 Xilinx Kintex UltraScale+ FPGA
arm开发·嵌入式硬件·阿里云·fpga开发·云计算·硬件工程·fpga
王道长服务器 | 亚马逊云4 天前
一个迁移案例:从传统 IDC 到 AWS 的真实对比
java·spring boot·git·云计算·github·dubbo·aws