流水线-阿里云镜像仓库
- 一、阿里云镜像仓库的创建
- 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
如何把nginx的静态资源放入k8s?
把nginx打包成docker镜像,
怎么查看nginx的静态资源呢?
进入nginx容器
docker exec -it nginx /bin/bash
查看nginx挂载的静态资源
cd /usr/share/nginx/html/static
ls
制作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
把nginx镜像提交到dockerhub
登录dockerhub
docker login -p 123456789 -u lzl123456
-u : dockerhub 用户名
-p: dockerhub 密码
把nginx镜像提交到dockerhub
docker push lzl123456/gulimall-nginx:v1.0
切换镜像名称
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
打包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.整合阿里云镜像仓库
创建阿里云镜像仓库
容器镜像服务 自己阿里云登录,
设置密码
密码 lzl123456
创建镜像仓库
atguigumailllzl
操作阿里云镜像仓库
登录阿里云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 tag e5767a4b33c6 registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-nginx:v1.0
docker images
登录镜像
docker login --username=阳光下的你0 registry.cn-shanghai.aliyuncs.com
密码是注册镜像仓库的密码
我的是lzl123456
推送镜像到阿里云仓库
docker push registry.cn-shanghai.aliyuncs.com/atguigumailllzl/gulimall-nginx:v1.0
进入阿里云镜像仓库,看镜像
看到有v1.0的nginx镜像
不用创建镜像仓库,直接上传镜像
先大哥标签,再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
二、流水线用 阿里云镜像仓库
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_CREDENTIAL_ID = 'aliyun-hub-id'
2.流水线创建
使用阿里云镜像进行流水线,部署项目
删除已经部署的服务
由于部署的服务会处理超时,所以全部删除
删除服务及工作负载
创建流水线
gulimall-jenkinsfile-aliyun-cicd
选择代码仓库
https://gitee.com/yummi/gulimail.git
对号,下一步
创建
部署gateway
部署失败
Pipeline aborted due to quality gate failure: ERROR
原因:sonarqube失效
解决:重新创建sonar-qube凭证
参考四,4,2,3,3.4 创建sonar-qube凭证,创建sonar-qube凭证
重新运行流水线,还是失败
删除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$c5bc282b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
4.修改阿里云镜像仓库为公开
点击某个阿里云镜像仓库的管理,如gulimall-ware,
进入镜像仓库内部,选择基本信息,修改信息
5.为每个部署的服务,添加多个副本
这样,多个副本就添加成功啦。
前提:阿里云镜像仓库有项目的镜像,镜像仓库是公开的
问题: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