文章目录
一、Jenkins+Docker+SpringCloud 持续集成流程说明
大致流程说明:
- 开发人员每天把代码提交到 Gitlab 代码仓库。
- Jenkins 从 Gitlab 中拉取项目源码,编译并打成 jar 包,然后构建成 Docker 镜像,将镜像上传到 Harbor 私有仓库。
- Jenkins 发送 SSH 远程命令,让生产部署服务器到 Harbor 私有仓库拉取镜像到本地,然后创建容器。
- 最后,用户可以访问到容器。
服务器名称 | IP 地址 | 安装的软件 |
---|---|---|
代码托管服务器 | 192.168.10.20 | Gitlab |
持续集成服务器 | 192.168.10.30 | Jenkins,Maven,Git,JDK,Sonarqube,Docker20.10.12-ce |
Docker 仓库服务器 | 192.168.10.40 | JDK,Tomcat,Docker20.10.12-ce,Harbor1.9.2 |
生产部署服务器 | 192.168.10.50 | Docker20.10.12-ce |
二、安装 Docker
192.168.10.30/40/50 需要安装 docker。
卸载老版本 docker
yum list installed | grep docker # 列出当前所有 docker 的包
yum -y remove docker* # 卸载 docker 包
rm -rf /var/lib/docker # 删除 docker 的所有镜像和容器
安装 docker
#!/bin/bash
#环境配置
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
#安装依赖包
yum -y install yum-utils device-mapper-persistemt-data lvm2
#设置阿里云镜像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 docker-ce 社区版(企业版叫 docker-ee,收费)
yum -y install docker-ce
#配置阿里云镜像加速(尽量使用自己的)
#地址 https://help.aliyun.com/document_detail/60750.html
#后面还需配置指向 harbor 仓库
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://4iv7219l.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
#网络优化
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
EOF
sysctl -p
systemctl restart network
systemctl enable docker && systemctl restart docker
三、安装 Harbor 仓库
在 192.168.10.40 服务器上
1. 部署 Docker-Compose 服务
#wget http://101.34.22.188/docker-compose/docker-compose -P /usr/local/bin
[root@c7-3 ~]#curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@c7-3 ~]#chmod +x /usr/local/bin/docker-compose
[root@c7-3 ~]#docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
2. 部署 Harbor
2.1 下载或上传 Harbor 安装程序
#wget http://101.34.22.188/harbor/harbor-offline-installer-v1.9.2.tgz -P /opt
#wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.9.2.tgz
[root@c7-3 ~]#cd /opt
[root@c7-3 /opt]#rz -E
#传入 harbor 安装包 harbor-offline-installer-v1.9.2.tgz
[root@c7-3 /opt]#tar zxvf harbor-offline-installer-v1.9.2.tgz -C /usr/local/
2.2 修改 harbor 安装的配置文件
[root@c7-3 /opt]#vim /usr/local/harbor/harbor.yml
#5行,修改设置为 Harbor 服务器的 IP 地址或者域名
hostname : 192.168.10.40
#10行,修改 port 为 85
port: 85
#27行,指定管理员的初始密码,默认的用户名/密码是 admin/Harbor12345
harbor_admin_password : Harbor12345
2.3 安装 Harbor
[root@c7-3harbor]#/usr/local/harbor/prepare
......
[root@c7-3harbor]#/usr/local/harbor/install.sh
......
[Step 3]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db ... done
Creating registry ... done
Creating harbor-portal ... done
Creating redis ... done
Creating registryctl ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://192.168.10.40.
For more details, please visit https://github.com/goharbor/harbor .
2.4 启动 Harbor
docker-compose up -d #启动
docker-compose stop #停止
docker-compose restart #重新启动
#--------------------------------------#
[root@c7-3harbor]#docker-compose up -d
harbor-log is up-to-date
harbor-db is up-to-date
registry is up-to-date
registryctl is up-to-date
harbor-portal is up-to-date
redis is up-to-date
harbor-core is up-to-date
harbor-jobservice is up-to-date
nginx is up-to-date
2.5 访问 Harbor
http://192.168.10.40:85
默认账户密码:admin/Harbor12345
Harbor 的项目分为公开和私有的:
- 公开项目:所有用户都可以访问,通常存放公共的镜像,默认有一个 library 公开项目。
- 私有项目:只有授权用户才可以访问,通常存放项目本身的镜像。
四、在 Harbor 创建用户和项目
1. 创建项目
2. 创建用户
3. 给私有项目分配用户
进入 tensquare 项目 -> 成员
角色 | 权限说明 |
---|---|
访客 | 对于指定项目拥有只读权限 |
开发人员 | 对于指定项目拥有读写权限 |
维护人员 | 对于指定项目拥有读写权限,创建 Webhooks |
项目管理员 | 除了读写权限,同时拥有用户管理/镜像扫描等管理权限 |
五、使用 Dockerfile 制作微服务镜像
制作 Eureka 注册中心的镜像
上传 jar 包到 Jenkins 服务器
编写 Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 10086
ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像
docker build --build-arg JAR_FILE=tensquare_eureka_server-1.0-SNAPSHOT.jar -t eureka:v1 .
查看镜像是否创建成功
docker images
创建容器
docker run -itd --name=eureka -p 10086:10086 eureka:v1
#启动需要时间
访问容器
http://192.168.10.30:10086
六、上传镜像到 Harbor 仓库
在 jenkins 服务器的 docker 服务中指定 harbor 地址(信任列表)
[root@c7-2 ~]#vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://4iv7219l.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.10.40:85"]
}
[root@c7-2 ~]#systemctl restart docker
给镜像打上标签
docker tag eureka:v1 192.168.10.40:85/tensquare/eureka:v1
登录 Harbor
docker login -u admin -p Harbor12345 192.168.10.40:85
推送镜像
docker push 192.168.10.40:85/tensquare/eureka:v1
七、从 Harbor 下载镜像
在 192.168.10.50 服务器上下载镜像
修改 daemon.json
[root@c7-4 ~]#vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://4iv7219l.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.10.40:85"]
}
[root@c7-4 ~]#systemctl restart docker
登录 harbor
docker login -u admin -p Harbor12345 192.168.10.40:85
下载镜像
[root@c7-4 ~]#docker pull 192.168.10.40:85/tensquare/eureka:v1
......
[root@c7-4 ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.10.40:85/tensquare/eureka v1 433162998bef 27 minutes ago 150MB