流水线-阿里云镜像仓库

  • 一、阿里云镜像仓库的创建
  • 1.docker镜像制作
  • 配置nginx
  • 如何把nginx的静态资源放入k8s?
  • 制作nginx镜像
  • 把nginx镜像提交到dockerhub
  • 切换镜像名称
  • 如何切换到阿里云镜像仓库?
  • 2.配置nginx的负载均衡
  • 配置nginx上游服务器的负载均衡
  • 打包nginx镜像
  • 3.整合阿里云镜像仓库
  • 创建阿里云镜像仓库
  • 操作阿里云镜像仓库
  • 不用创建镜像仓库,直接上传镜像
  • 二、流水线用 阿里云镜像仓库
  • 1.Jenkins修改阿里云镜像仓库
  • 修改环境的REGISTRY
  • 修改环境的DOCKERHUB_NAMESPACE
  • 修改登录地址
  • 仓库阿里云hub id
  • 修改登录地址
  • 2.流水线创建
  • 删除已经部署的服务
  • 创建流水线
  • 部署gateway
  • 部署失败
  • 重新运行流水线,还是失败
  • 重新运行流水线,部署gateway
  • 部署所有的项目
  • 3.流水线部署完成&bug修改
  • 问题1、gulimall-seckill服务
  • 问题2、gulimall-order 和 gulimall-ware服务
  • 问题3、renren_fast服务
  • 问题4、gulimall-gateway服务
  • 4.修改阿里云镜像仓库为公开
  • 5.为每个部署的服务,添加多个副本
  • 问题:seckill,order,ware,product项目部署失败
  • k8s登录阿里云镜像仓库失败
  • 法一:修改阿里云镜像固定密码,没用
  • 法二:修改配置文件,推荐


一、阿里云镜像仓库的创建

1.docker镜像制作

192.168.56.10登录,也就是电商的数据库的docker

配置nginx

配置实现动静分离nginx

云效流水线部署到docker 阿里云 流水线_云效流水线部署到docker

如何把nginx的静态资源放入k8s?

把nginx打包成docker镜像,
怎么查看nginx的静态资源呢?

进入nginx容器

docker exec -it nginx /bin/bash

查看nginx挂载的静态资源

cd /usr/share/nginx/html/static
ls

云效流水线部署到docker 阿里云 流水线_docker_02

制作nginx镜像
docker commit -a “leifengyang” -m “nginxxx” 容器 id mynginx:GA-2.0

1 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
2 OPTIONS 说明:
1) -a :提交的镜像作者;
2) -c :使用 Dockerfile 指令来创建镜像;
3) -m :提交时的说明文字;
4) -p :在 commit 时,将容器暂停。
docker commit -a "lzl" -m "nginx" 5ab9431b91cd lzl123456/gulimall-nginx:v1.0

5ab9431b91cd 通过docker ps, 获取nginx的容器id

云效流水线部署到docker 阿里云 流水线_推送_03

把nginx镜像提交到dockerhub

登录dockerhub

docker login -p 123456789 -u lzl123456

-u : dockerhub 用户名
-p: dockerhub 密码
把nginx镜像提交到dockerhub

docker push lzl123456/gulimall-nginx:v1.0

云效流水线部署到docker 阿里云 流水线_推送_04

切换镜像名称

docker tag 老的镜像名称 新的镜像名称
再push新的镜像

docker tag lzl123456/nginx:v.1.0 lzl123456/nginx:v2.0

push lzl123456/nginx:v2.0

如何切换到阿里云镜像仓库?

由于dockerhub使用国外的镜像仓库,最好切换到国内的镜像仓库。如阿里云

2.配置nginx的负载均衡

配置nginx上游服务器的负载均衡

切换到nginx配置文件
cd /mydata/nginx/conf

备份nginx配置文件
cp nginx.conf nginx.conf.bak

修改nginx配置文件,nginx.conf
vi nginx.conf

upstream gulimall {
      server 192.168.56.100:31003;
      server 192.168.56.101:31003;
      server 192.168.56.102:31003;
   }
   
192.168.56.100是k8s的ip
31003:是gateway的deploy下的deploy.yaml的端口号

查看nginx上游服务器是否修改成功

docker exec -it 5ab9431b91cd /bin/bash


/etc/nginx
cat nginx.conf

云效流水线部署到docker 阿里云 流水线_推送_05

打包nginx镜像

打包nginx镜像,上传到docker hub

docker commit -a "lzl" -m "nginx-update-upstream" 5ab9431b91cd lzl123456/gulimall-nginx:v1.2

docker push lzl123456/gulimall-nginx:v1.2

3.整合阿里云镜像仓库

创建阿里云镜像仓库

容器镜像服务 自己阿里云登录,

设置密码

云效流水线部署到docker 阿里云 流水线_推送_06


密码 lzl123456

云效流水线部署到docker 阿里云 流水线_nginx_07


创建镜像仓库

atguigumailllzl

云效流水线部署到docker 阿里云 流水线_nginx_08


云效流水线部署到docker 阿里云 流水线_nginx_09

操作阿里云镜像仓库

登录阿里云Docker Registry

docker login --username=阳光下的你0 registry.cn-shanghai.aliyuncs.com

从Registry中拉取镜像

docker pull registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-nginx:[镜像版本号]

将镜像推送到Registry

docker login --username=阳光下的你0 registry.cn-shanghai.aliyuncs.com
 docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-nginx:[镜像版本号]
 docker push registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-nginx:[镜像版本号]

云效流水线部署到docker 阿里云 流水线_云效流水线部署到docker_10

docker tag e5767a4b33c6  registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-nginx:v1.0

docker images

云效流水线部署到docker 阿里云 流水线_docker_11


登录镜像

docker login --username=阳光下的你0 registry.cn-shanghai.aliyuncs.com
 
密码是注册镜像仓库的密码
我的是lzl123456

推送镜像到阿里云仓库

docker push  registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-nginx:v1.0

云效流水线部署到docker 阿里云 流水线_推送_12


进入阿里云镜像仓库,看镜像

云效流水线部署到docker 阿里云 流水线_云效流水线部署到docker_13


看到有v1.0的nginx镜像

云效流水线部署到docker 阿里云 流水线_云效流水线部署到docker_14

不用创建镜像仓库,直接上传镜像

先大哥标签,再push。默认自己创建镜像仓库

docker tag e2b066e3fc02  registry.cn-shanghai.aliyuncs.com/atguigumailllzl/rabbitmq:v1.0

docker push registry.cn-shanghai.aliyuncs.com/atguigumailllzl/rabbitmq:v1.0

docker images

云效流水线部署到docker 阿里云 流水线_nginx_15

二、流水线用 阿里云镜像仓库

1.Jenkins修改阿里云镜像仓库

修改环境的REGISTRY

REGISTRY = 'registry.cn-shanghai.aliyuncs.com'

registry.cn-shanghai.aliyuncs.com:是阿里云镜像的前缀

修改环境的DOCKERHUB_NAMESPACE

DOCKERHUB_NAMESPACE的值改为 atguigumailllzl

DOCKERHUB_NAMESPACE = 'atguigumailllzl'

atguigumailllzl:是阿里云镜像仓库的名称空间

修改登录地址

仓库阿里云hub id

云效流水线部署到docker 阿里云 流水线_云效流水线部署到docker_16

修改登录地址
DOCKER_CREDENTIAL_ID = 'aliyun-hub-id'

2.流水线创建

使用阿里云镜像进行流水线,部署项目

删除已经部署的服务

由于部署的服务会处理超时,所以全部删除
删除服务及工作负载

创建流水线

gulimall-jenkinsfile-aliyun-cicd

选择代码仓库

https://gitee.com/yummi/gulimail.git

云效流水线部署到docker 阿里云 流水线_推送_17


对号,下一步

云效流水线部署到docker 阿里云 流水线_docker_18


创建

部署gateway

云效流水线部署到docker 阿里云 流水线_云效流水线部署到docker_19

部署失败

Pipeline aborted due to quality gate failure: ERROR
原因:sonarqube失效
解决:重新创建sonar-qube凭证
参考四,4,2,3,3.4 创建sonar-qube凭证,创建sonar-qube凭证

云效流水线部署到docker 阿里云 流水线_docker_20

重新运行流水线,还是失败

删除jenkinsfile的构建的某个代码

timeout(time: 1, unit: 'HOURS') {
            waitForQualityGate true
          }
重新运行流水线,部署gateway

构建的第四步,登录阿里云镜像仓库可能失败,我们就不登录,不推送latest镜像
发布最后一步,推送版本镜像,也不做。
直接手动推送latest镜像、与版本的镜像

部署所有的项目

3.流水线部署完成&bug修改

问题1、gulimall-seckill服务

Field rabbitTemplate in com.atguigu.gulimall.seckill.service.impl.SeckillServiceImpl required a bean of type ‘org.springframework.amqp.rabbit.core.RabbitTemplate’ that could not be found.

The injection point has the following annotations:

  • @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type ‘org.springframework.amqp.rabbit.core.RabbitTemplate’ in your configuration.

问题2、gulimall-order 和 gulimall-ware服务

no main manifest attribute, in /app.jar

问题3、renren_fast服务

一会好,一会不好
Caused by: java.sql.SQLSyntaxErrorException: Unknown database ‘renren_fast’

问题4、gulimall-gateway服务

trationDelegate云效流水线部署到docker 阿里云 流水线_推送_21云效流水线部署到docker 阿里云 流水线_云效流水线部署到docker_22$c5bc282b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

4.修改阿里云镜像仓库为公开

点击某个阿里云镜像仓库的管理,如gulimall-ware,

进入镜像仓库内部,选择基本信息,修改信息

云效流水线部署到docker 阿里云 流水线_推送_23

5.为每个部署的服务,添加多个副本

云效流水线部署到docker 阿里云 流水线_docker_24


云效流水线部署到docker 阿里云 流水线_nginx_25


这样,多个副本就添加成功啦。

云效流水线部署到docker 阿里云 流水线_推送_26

前提:阿里云镜像仓库有项目的镜像,镜像仓库是公开的

问题:seckill,order,ware,product项目部署失败

k8s登录阿里云镜像仓库失败

Error response from daemon: Get “https://registry.cn-shanghai.aliyuncs.com/v2/”: context deadline exceeded

法一:修改阿里云镜像固定密码,没用

阿里云镜像仓库,个人实例,访问凭证,固定密码,修改就可以
再登录。
具体没操作,不知道效果

法二:修改配置文件,推荐

配置insecure-registries
vi /etc/docker/daemon.json

"insecure-registries":["registry.cn-shanghai.aliyuncs.com"]

vi /etc/resolv.conf

nameserver 8.8.8.8

重启,登录

systemctl daemon-reload
systemctl start docker.service
docker login -u 阳光下的你0 -p lzl123456 registry.cn-shanghai.aliyuncs.com

拉取推送镜像

docker push registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-member:latest