Day04-jenkins-docker
- 9. 案例06: 基于docker的案例实现静态代码
- 9.1 整体流程
- 9.2 步骤与环境
- 1) 步骤
- 2) 环境
 
- 9.3 详细步骤
- 1)代码准备
- 2)书写dockerfile
- 3)准备私有仓库
- 4)创建jenkins任务
- 5)web节点上启动对应的docker容器
 
 
9. 案例06: 基于docker的案例实现静态代码
9.1 整体流程

9.2 步骤与环境
1) 步骤
-  代码,上传到gitlab 
-  书写测试dockerfile(只需要代码+docker环境即可) 
-  jenkins创建任务 - 拉取代码
- 执行构建shell命令 
    - jk:docker build
- jk:docker push
- web:docker run + 私有仓库镜像
 
 
-  检查结果 
2) 环境
| 角色 | 主机 | ip | 
|---|---|---|
| gitlab/gitee | devops-oldboy-gitlab | 10.0.0.71/172.16.1.71 | 
| jenkins | devops-oldboy-jenkins | 10.0.0.72/172.16.1.72 | 
| web服务器 | web05 | 10.0.0.11/172.16.1.11 | 
| web服务器 | web06 | 10.0.0.12/172.16.1.12 | 
| 负载均衡 | lb01+lb02 | 10.0.0.5/172.16.1.5 | 
9.3 详细步骤
1)代码准备

- 上传代码
git init 
git remote add origin git@gitlab.oldboylinux.cn:root/docker_bird_oldboy.git
git add .
git commit  -m "刚刚写的代码"
git tag -a v1.0 -m "新建了一个标签"
git push -u origin master
git push -u origin --tags
2)书写dockerfile
- jenkins机器安装与启动docker
- 发送bird代码到jenkins的/app/code/bird/下面
- 准备开始书写dockerfile
cat Dockerfile
FROM nginx:1.22-alpine
LABEL author=lidao996 url=oldboyedu.com version=v1.0
COPY . /usr/share/nginx/html/
EXPOSE 80
#CMD 可以忽略,因为nginx镜像已有自动运行nginx服务的CMD了.
docker build -t web:ngx_bird_v1.0 .
docker run -d --name "ngx_bird_v1.0" -p 8848:80 --rm web:ngx_bird_v1.0
#--rm测试时候可以加上,如果不确定镜像稳定性可以不加上加上--restart=always.注意--restart和--rm冲突,二选一.
未来实际项目中:
前端代码一般需要编译(npm,cnpm,yarn),生成到指定的目录target/dist/…
通过dockefile COPY dist/* /usr/share/nginx/html/
3)准备私有仓库
- registry(docker02)启动docker私有仓库.
docker run -d --name "oldboy_registry" -p 5000:5000 -v registry:/var/lib/registry --restart=always registry:latest
- jenkins配置通过http方式访问私有仓库
[root@devops-oldboy-jenkins /app/code/bird]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"],
  "insecure-registries": ["http://reg.oldboylinux.cn:5000"]
}
- 搭建完成私有仓库
docker build -t reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_v2.0 . 
#docker login -uxxx -pxxx 
docker push reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_v2.0
4)创建jenkins任务






#0.判断git_tag是否为默认
if [ "$git_tag" = "origin/master" ];then
   git_tag=latest
fi
#1. 构建镜像
docker build -t reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag} .
#2. 推送到私有仓库
#docker login -uxxx -pxxx   私有仓库地址
docker push reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag}
#3. 部署web服务器
5)web节点上启动对应的docker容器
密钥认证
拉取镜像
启动容器
#vars
web_servers="172.16.1.82"
#0.判断git_tag是否为默认
if [ "$git_tag" = "origin/master" ];then
   git_tag=latest
fi
#1. 构建镜像
docker build -t reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag} .
#2. 推送到私有仓库
#docker login -uxxx -pxxx   私有仓库地址
docker push reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag}
#3. 部署web服务器
for ip in ${web_servers}
do
  ssh root@${ip} "
#0.未来可以加入判断判断端口是否占用
#端口冲突手动解决.未来可以ansible实现.
#if [ `docker ps |grep -w 80 |wc -l` -eq 1 ];then
      #删除占用80端口的容器
#   fi
docker ps |grep -w 80 |awk '{print $NF}'|xargs docker rm -f
#0.未来可以加入判断判断容器的名字是否有冲突.
if [ `docker ps -a |grep -w "ngx_bird_${git_tag}" |wc -l ` -eq 1 ];then
   docker rm -f ngx_bird_${git_tag}
fi
#启动
docker run -d --name "ngx_bird_${git_tag}" \
-p 80:80 --restart=always \
reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag}"
done


![[OC]萝卜圈Python手动机器人脚本](https://img-blog.csdnimg.cn/direct/48ef72aff95246928b417efd81664cd5.png)
















