# 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)