一小段学习时间的知识点独立的,需要一点一点连接组成网。
前要:
-开发提交git的时候要注明版本。
-在Jenkins中,实际分成了两部分,持续发布一个项目,持续部署是一个项目。分开是因为交付和部署可能不是同一个人。
-182是私有仓库的IP,170是需要部署的环境。
大概思路:
1、把打包好的镜像放到哪里去? ------创建私有仓库。
2、把什么内容,如何放到私有仓库? -----拉取源码和对应的版本号,打包成镜像,推送到私有仓库。
3、如何拿到已经放好的? -----从私有仓库自动拉取并启动镜像。
4、预期结果? ------输入访问地址即可访问。
一、私有仓库的创建
docker hub 在线存储库可以由任何用户发布和使用,在涉及隐私项目或者公司处在内网就不太适用了。这就涉及需要到私有存储库了。私有仓库基于registry镜像。
1、安装指令
docker pull registry
2、配置私有仓库地址
#1、执行编辑路径 vim /etc/docker/daemon.json #2、加入"insecure-registries" "insecure-registries":[192.168.0.182] #3、按esc 输入: wq 保存 #4、保存之后重启一下 docker systemctl restart docker
3、创建容器
docker run -d -p 5000:5000 --name registry docker.io/registry
部分参数说明:
- -d:让容器在后台运行
- -p:指定容器内部使用的网络端口映射到我们使用的主机上
- --name:指定容器创建的名称
4、重新加载配置
sudo systemctl daemon-reload
5、重启一下docker
sudo systemctl daemon-reload
自此私用仓库 建立已经完成。如果想验证一下,可以通过docker push 进行推送,然后通过
http://192.168.0.182:5000/v2/_catalog 来验证是否成功。
二、持续发布
1、勾选项目是参数化 ,选择git参数,填写参数名称(这个名称要确定好,在后面构建镜像的时候会用到)

2.输入源码地址

3.构建 shell

#构建镜像
docker build -t 192.168.0.182:5000/ci:$tag .
#推送镜像到仓库 -- 交付版本
docker push 192.168.0.182:5000/ci:$tag
4、运行构建:


5、验证是否成功:
访问182上的仓库,已经能够看到我们打包好提交的镜像名称了。

-------------------------------------
遇到的问题:
The push refers to repository [192.168.0.182:5000/ci] Get https://192.168.0.182:5000/v2/: http: server gave HTTP response to HTTPS client
--解决:要在推送所接受的机子(vim /etc/docker/daemon.json)里面加上如下内容:
"insecure-registries": ["192.168.0.182:5000"]
然后再对docker进行重启
systemctl restart docker.service
三、持续部署
1、版本号参数:
部署部分不用到git源码了,但是需要设置tag,就是发版的版本号。

tag这个名字是要定义好的,在docker-compose中需要调用这个参数
2、构建:
1、shell
# 复制docker-compose模板文件 cp /home/hww/.jenkins/workspace/jenkins+docker/docker-compose-jenkins-template.yml docker-compose.yml # 修改模板文件中的镜像版本 sed -i "s/{tag}/$tag/g" docker-compose.yml # 上传到170,后续在170启动容器【要部署在哪个的容器】 scp docker-compose.yml root@192.168.0.170:/root/java/jenkins
2.Send files or execute commands over SSH 设置

cd /root/java/jenkins 停止与删除旧容器 docker-compose down 拉取新镜像,并启动新容器 docker-compose up -d
3、启动构建


4、验证
docker image查看镜像

docker ps 查看已经启动的容器

浏览器启动访问:

至此,整个流程已经完成。
注意的是:
build 镜像名称也要规定好,docker-compose 里面有定义。所以两者要一样(imaage/container_name)
version: "3.3" services: hrunmgr: # 这是jenkins发版打包的镜像,上传到私有仓库192.168.0.182 image: 192.168.0.182:5000/hrunmgr:{tag} container_name: hrunmgr environment: - TZ=Asia/Shanghai #network_mode: host #只暴露2个端口 ports: - "8080:8080" - "5555:5555" # 由于jenkins发版打包的镜像已经构建过代码,不用重复构建,因此去掉重复代码 # build: . # volumes: # 映射目录, 方便读写 # - ./:/apps/HttpRunnerManager # #command: "/bin/sh", "-c", "while true; do sleep 100; done" # 让进程一直跑, 否则容器会exit # entrypoint: /apps/HttpRunnerManager/start.sh