eureka docker eureka docker集群_eureka docker

=================

交作业:hello-world级的自动化部署(Maven+Git+Docker+Jenkins),因为内容稍微有点儿多,分两篇,这是第二篇——构建工程。

=================

环境:

CentOS7-64

已安装JAVA8(Jekins需要)

Git

Maven

Jenkins

创建SpringBoot项目,并上传到github上

我已建立了一系列SpringCloud工程(当然都是HelloWorld级别的),github地址:

https://github.com/wangjuns8/spring-cloud-study.git

(内容基于长克同学的教程、代码及指导,非常非常感谢,更多helloworld级的SpringCloud的教程文末列出链接)

我的工程是一个parent project,下面有多个model,这次以eureka和provider-user 为例。

项目整合Docker

在model的src/main目录下创建docker文件夹,再新建一个Dockerfile文件

eureka docker eureka docker集群_docker自动化部署_02

内容如下:

---------------------------------

#基于openjdk:8
FROM openjdk:latest
#把jar包copy到的工作目录下
COPY ./microservice-discovery-eureka/target/microservice-discovery-eureka.jar /work/project/microservice-discovery-eureka.jar
# 指定当前操作目录
WORKDIR /work/project
#容器启动后执行的操作
CMD java -jar microservice-discovery-eureka.jar
---------------------------------

说明:

1. Dockerfile不一定放在项目下,只要jenkins编译时能访问到的地方就行,放在项目下是为了便于管理;

2. microservice-discovery-eureka.jar是打包的名字,可以在pom.xml里设置:

---------------------------------
<build>
    <finalName>microservice-discovery-eurekafinalName>
build>
---------------------------------

创建Jenkins任务:

>> 点击主页面左侧菜单栏的“新建任务”

>> 输入任务名称

>> 选择“构建一个maven项目”

如果没有这个选项,则安装Maven Integration plugin先(详见上篇作业)

>> 确定,进入配置界面

eureka docker eureka docker集群_docker容器 eureka 集成_03

填写jenkins配置

eureka docker eureka docker集群_jenkins找不到pom_04

eureka docker eureka docker集群_jenkins找不到pom_05

eureka docker eureka docker集群_jenkins找不到pom_06

因为我要构建的是parent工程下的eureka model,所以指定到model下的pom.xml

为了提高package效率,可以给它加几个参数:

clean package -T 1C -Dmaven.test.skip=true  -Dmaven.compile.fork=true

说明:

1、跳过测试代码:-Dmaven.test.skip=true

2、多线程进行编译:-Dmaven.compile.fork=true

3、如果你用的Maven是3.×以上版本,可以增加 -T 1C 参数,表示每个CPU核心跑一个工程;

添加构建后执行脚本(docker构建):

eureka docker eureka docker集群_jenkins找不到pom_07

填写脚本如下:

#!/bin/sh
#docker 镜像/容器名字都命名为jar包的名字
SERVER_NAME=microservice-discovery-eureka
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
#当前日期
DATE=`date +%Y%m%d`
#清除旧容器
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID"
echo "停止旧容器"
docker stop $SERVER_NAME
echo "删除旧容器"
docker rm $SERVER_NAME
fi
# 清除旧镜像
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID"
echo "删除镜像"
docker rmi $IID
fi
#构建镜像,注意build最后面的“.”不能省略
echo "开始构建镜像"
docker build -f ./$SERVER_NAME/src/main/docker/Dockerfile -t $SERVER_NAME .
echo "构建镜像成功!"
# 运行docker容器
echo "创建并启动$SERVER_NAME容器..."
docker run --name $SERVER_NAME -d -p 8761:8761 $SERVER_NAME:v${DATE}
echo "$SERVER_NAME容器启动完成"
-------------------
说明:server_name\port\路径等,要根据个人情况填写
-------------------

保存退出。

左侧菜单->立即构建

左侧菜单->构建历史(Build History)第一条,显示构建进度,点击进度条,查看后台日志。

左侧菜单->工作空间,查看所有该工程下的文件和目录结构

位置:/var/lib/jenkins/workspace

构建的任务都在这下面。

eureka docker eureka docker集群_docker自动化部署_08

jenkins工作过程:

1. 把源码从git全部下载下来

2. 在本地用mvn编译、打包

3. 顺序执行构建后shell脚本(docker部分)

构建过程中,出现各种异常,主要是找不到文件(路径不对),网络不通,内存不足之类的……

解决办法,参见后面“补充”。

创建第二个jenkins任务

有个偷懒儿的办法,在新建页面最下面,有个拷贝已存在的任务。

拷贝过来,改一改就能用了,哈哈。

eureka docker eureka docker集群_eureka docker_09

效果展示:

先构建wj-tets-eureka,再构建provider-user。

访问:http://49.232.150.148:8761/

eureka docker eureka docker集群_docker自动化部署_10

遗留问题:

1. 因为我的git工程是一个parent工程下面多个model,所以,在构建model的时候,jenkins会把所有parent代码下载下来(虽然没有影响,但总觉得浪费空间)。目前还不知道怎么解决。

2. 一个docker启动大约用掉200M内存,我的虚拟机最多只能启动俩服务……,后面会尝试给docker减个肥

git上同样有很多入门的SpringCloud教程,详见:

《史上最简单的 SpringCloud 教程》系列:

https://github.com/forezp/SpringCloudLearning

Spring Cloud Examples

内容跟《史上最简单的 SpringCloud 教程》极度相似,互有补充内容

https://github.com/ityouknow/spring-cloud-examples

Maven多模块编译慢的问题

=================补充=====================

1. docker构建镜像异常:

错误信息:

/usr/bin/docker-current: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create?name=microservice-discovery-eureka: dial unix /var/run/docker.sock: connect: permission denied.

See '/usr/bin/docker-current run --help'.

原因:

Jenkins默认用户使用的是jenkins,没有操作 /var/run/docker.sock的权限。

解决:

方法一,修改默认用户为root(权限更大):

vi /etc/sysconfig/jenkins

JENKINS_USER="jenkins"

改成:

JENKINS_USER="root"

方法二,给jenkins用户操作权限

1)添加docker用户组

groupadd docker

2)把当前用户加入docker用户组

gpasswd -a ${USER} docker

3)查看是否添加成功

cat /etc/group | grep ^docker

4)重启docker

serivce docker restart

5)更新用户组

newgrp docker

2.  Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work

转自:https://cloud.tencent.com/developer/article/1552661

解决方法

vim /etc/sysctl.conf

或者

vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:

net.ipv4.ip_forward=1

重启network服务

systemctl restart network

查看是否修改成功

sysctl net.ipv4.ip_forward

如果返回为“net.ipv4.ip_forward = 1”则表示成功了 重启容器即可。

3. ERROR: Maven JVM terminated unexpectedly with exit code 137

解决:

  虚拟内存不够了。。。增加内存容量。

4. 常用docker命令:

1)查看docker的所有镜像:

docker images

2)列出所有运行中容器

docker ps

列出所有容器

docker ps -a

3)启动一个一直停留在后台运行的容器

docker run -dit 720cc49ec610 /bin/bash

4)登录docker容器:

docker exec -it b87ac4fe6fbc /bin/bash