云计算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
相关推荐
昔我往昔4 小时前
阿里云文本内容安全处理
安全·阿里云·云计算
写代码的学渣7 小时前
Linux云计算个人学习总结(一)
linux·运维·云计算
林农8 小时前
C02S11-Linux系统的安全与控制
linux·云计算
danns88812 小时前
什么是 AWS PrivateLink
云计算·aws
shiran小坚果14 小时前
AWS RDS MySQL内存使用
数据库·mysql·云计算·database·aws
武汉唯众智创16 小时前
职业院校关于大数据、云计算和物联网传感器技术的结合与应用探讨
大数据·云计算·物联网传感器技术
小安运维日记17 小时前
Linux云计算 |【第五阶段】CLOUD-DAY8
linux·运维·docker·云计算·k8s·学习方法
嘟嘟Listing18 小时前
阿里云docker安装禅道记录
阿里云·docker·云计算
阿里云大数据AI技术18 小时前
【EMNLP2024】阿里云人工智能平台 PAI 多篇论文入选 EMNLP2024
人工智能·阿里云·云计算·emnlp