# ocp-eureka-server
**Repository Path**: bingh/ocp-eureka-server
## Basic Information
- **Project Name**: ocp-eureka-server
- **Description**: ocp-eureka-server
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-12-29
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 使用 Maven 插件构建 Docker 镜像
* [使用 Maven 插件构建 Docker 镜像]()
* [工具]()
* [使用插件构建 Docker 镜像]()
* [简单使用]()
* [使用 Dockerfile 进行构建]()
* [将 Docker 镜像 push 到 DockerHub 上]()
* [将插件绑定在某个 phase 执行]()
* [常见异常]()
* [连接不上 2375 一般在 Win7 上出现]()
* [TIPS]()
* [代码地址]()
* [参考文档](http://blog.csdn.net/qq_22841811/article/details/67369530#%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3)
## 工具
[工欲善其事,必先利其器]()。笔者经过调研,有以下几款 Docker 的 Maven 插件进入笔者视野:
| 插件名称 | 官方地址 |
| --- | --- |
| docker-maven-plugin | [https://github.com/spotify/docker-maven-plugin](https://github.com/spotify/docker-maven-plugin) |
| docker-maven-plugin | [https://github.com/fabric8io/docker-maven-plugin](https://github.com/fabric8io/docker-maven-plugin) |
| docker-maven-plugin | [https://github.com/bibryam/docker-maven-plugin](https://github.com/bibryam/docker-maven-plugin) |
笔者从 Stars、文档易用性以及更新频率三个纬度考虑,选用了第一款。
## 使用插件构建 Docker 镜像
### 简单使用
项目:eureka-server:
* 在 pom.xml 中添加下面这段
```
org.springframework.boot
spring-boot-maven-plugin
com.spotify
docker-maven-plugin
0.4.3
${docker.image.prefix}/${project.artifactId}
src/main/docker
/
${project.build.directory}
${project.build.finalName}.jar
```
* 执行命令:
```
mvn clean package docker:build
```
* 我们执行`docker images` 会发现该镜像已经被构建成功:
* 启动镜像
```
docker run -p 8761:8761 eureka-server
```
我们会发现该 Docker 镜像会很快地启动。
* 访问测试
访问 [http://Docker 宿主机 IP:8761](http://192.168.99.100:8761/) ,能够正常看到 Eureka 界面。
### 使用 Dockerfile 进行构建
上文讲述的方式是最简单的方式,很多时候,我们还是要借助 Dockerfile 进行构建的,首先我们在 uereka-server/src/main/docker 目录下,建立文件 Dockerfile
```
FROM java:8VOLUME
/tmp ADD eureka-server-0.0.1-SNAPSHOT.jar eureka-server.jar
RUN bash -c 'touch /eureka-server.jar'
EXPOSE 9000ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka-server.jar"]
```
修改 pom.xml
```
eureka-server
${project.basedir}/src/main/docker
/
${project.build.directory}
${project.build.finalName}.jar
```
其他步骤一样。这样即可使用 Dockerfile 进行构建 Docker 镜像啦。
### 将 Docker 镜像 push 到 DockerHub 上
* 首先修改 Maven 的全局配置文件 settings.xml,添加以下段落
```
docker-hub
DockerHub用户名
DockerHub密码
DockerHub邮箱
```
* 在 DockerHub 上创建 repo
repo名称:eureka-server
* 项目 pom.xml 修改为如下:注意 imageName 的路径要和 repo 的路径一致
```
weiguo21/eureka-server
${project.basedir}/src/main/docker
/
${project.build.directory}
${project.build.finalName}.jar
docker-hub
https://index.docker.io/v1/
```
* 执行命令:
```
mvn clean package docker:build -DpushImage
```
* 搞定,等构建成功后,我们会发现 Docker 镜像已经被 push 到 DockerHub 上了。
### 将镜像 push 到私有仓库
在很多场景下,我们需要将镜像 push 到私有仓库中去,这边为了讲解的全面性,私有仓库采用的是配置登录认证的私有仓库。
* 和 push 镜像到 DockerHub 中一样,我们首先需要修改 Maven 的全局配置文件 settings.xml,添加以下段落
```
docker-registry 你的DockerHub用户名 你的DockerHub密码 你的DockerHub邮箱
```
* 将项目的 pom.xml 改成如下,
```
com.spotify
docker-maven-plugin
0.4.12
microservice-discovery-eureka
java
["java", "-jar", "/${project.build.finalName}.jar"]
/
${project.build.directory}
${project.build.finalName}.jar
```
* 执行:
```
mvn clean package docker:build -DpushImage
```
稍等片刻,将会 push 成功。
### 将插件绑定在某个 phase 执行
在很多场景下,我们有这样的需求,例如执行`mvn clean package` 时,自动地为我们构建 docker 镜像,可以吗?答案是肯定的。我们只需要将插件的`goal` 绑定在某个 phase 即可。
所谓的 phase 和 goal,可以这样理解:maven 命令格式是:`mvn phase:goal` ,例如`mvn package docker:build` 那么,`package` 和`docker` 都是 phase,`build` 则是 goal 。
插件配置加上
```
build-image
package
build
```
即可。本例指的是讲 docker 的 build 目标,绑定在 package 这个 phase 上。也就是说,用户只需要执行`mvn package` ,就自动执行了`mvn docker:build` 。
## 常见异常
### 连接不上 2375(一般在 Win7 上出现)
```
Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect -> [Help 1]
```
解决步骤:
* 输入`docker-machine env`
```
$Env:DOCKER_TLS_VERIFY = "1"$Env:DOCKER_HOST = "tcp://192.168.99.100:2376"$Env:DOCKER_CERT_PATH = "C:\Users\Administrator\.docker\machine\machines\default
```
* 为插件添加配置
```
https://192.168.99.100:2376
C:\Users\cary-PC\.docker\machine\machines\default
```
* 参考:[https://github.com/spotify/docker-maven-plugin/issues/116](https://github.com/spotify/docker-maven-plugin/issues/116)
## TIPS
1. imageName 必须符合正则 [a-z0-9-_.],否则将会构建失败
2. 插件默认使用 localhost:2375 去连接 Docker,如果你的 Docker 端口不是 2375,需要配置环境变量`DOCKER_HOST=tcp://:2375`
## 代码地址
> [https://gitee.com/topsgroup/eureka-server](https://gitee.com/topsgroup/eureka-server)
>
## 参考文档
> [http://developer.51cto.com/art/201404/434879.htm](http://developer.51cto.com/art/201404/434879.htm)
> [https://linux.cn/article-6131-rss.html](https://linux.cn/article-6131-rss.html)
> [https://blog.csdn.net/keketrtr/article/details/78042856](https://blog.csdn.net/keketrtr/article/details/78042856)