1:本地开发的工程放到私有gitlib上。
2:在运行镜像的环境中(我使用的是centos7)安装git命令。
yum install git
查看是否安装成功
git --version
3:运行git命令,下载我上传到gitlib的工程。
git clone http://192.168.155.99:82/RisingCloud/rc-alarm-engine.git
ps:更新工程命令:在rc-alarm-engine目录里运行 git pull命令,更新master版本。
其他git命令上网查询。
4:在运行镜像的环境中(我使用的是centos7)安装maven命令。
下载maven安装包
yum install wget
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
解压maven包
tar zxf apache-maven-3.1.1-bin.tar.gz
移动到指定目录
mv apache-maven-3.1.1 /usr/local/maven3
安装jdk
下载:
解压:
tar -zxvf jdk1.8.0_144.tar.gz
移动到:
mv jdk1.8.0_144 /usr/java/
配置环境变量
vi /etc/profile
#在适当的位置添加
#set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_144
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export M2_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
文件生效
source /etc/profile
检查maven是否安装成功
mvn -v
5:回到git下载的工程目录
6:我在工程中先写好了dockerfile文件,位置和内容:
dockerfile内容:
FROM:哪个镜像作为基础镜像。我用的是dockerhub上提供的原始openjdk8。(注意:这里最好用官方的基础镜像,不要用其他第三方的基础镜像,会有安全隐患)
MAINTAINER:作者
ADD:把rc-ae-server/target/路径下的jar包,放到镜像里的根路径并起名app.jar
EXPOSE:设置镜像启动后对外暴露的端口,这个端口跟我工程启动的端口配置的一致
ENTRYPOINT:用java -jar 启动镜像中的app.jar包
7:maven编译工程,生成jar包
工程中很多的包我们都放在了自己建立的私库中,所以要先在.m2下配置setting.xml,允许在maven私库中下载jar包。
setting.xml文件配置内容:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/root/.m2/repository</localRepository>
<servers>
<server>
<id>myReleases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>mySnapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.155.100:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>nexus repository</name>
<url>http://192.168.155.100:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>nexus repository</name>
<url>http://192.168.155.100:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
具体的setting.xml解释请上网上找相应说明,这里就不解释了。
mvn clean install
这时候能在工程的target目录下看到打好的jar包
8:在工程根目录下我放置的Dockerfile这个路径下,运行docker命令打镜像
docker build -t "192.168.155.100:8082/rc-alarm-engine" .
docker images 查看生成的镜像
9:镜像启动生成容器
docker run -d -p 9003:9003 --name rc-alarm-engine 192.168.155.100:8082/rc-alarm-engine
打开容器日志,看工程是否启动成功:
docker logs -f 容器id
10:工程正常启动,说明镜像没有问题,然后把镜像push到私有库上(nexus-docker)
docker login -u admin -p admin123 192.168.155.100:8082
docker push 192.168.155.100:8082/rc-alarm-engine
查看是否已经传到nexus-docker
上传成功,推出
docker logout 192.168.155.100:8082
坑、坑、坑、在操作过程中遇到的各种各样的坑,写出来,希望大家以后小心
1:我们用的是springcloud搭建的工程,每个子服务的结构是:client、service、vo
在配置pom.xml文件的时候,一定要注意引用maven插件只能配置在一处,不能配置多个。
我是在service工程中配置的,配置好后,其他两个工程都可以使用这个插件的功能。
刚开始的时候,我在三个里面都配置了,工程不报错,也可以正常运行,maven deploy也提示我正常。可我在上面的步骤7生成jar包的时候,mvn install的时候一直报错,提示我找不到我上传到私服的jar包。我在私服上是可以看到我上传的jar包,就是提示找不到。最后发现原来是配置了多个maven-plugin导致我上传的jar包有问题,系统也不提示。找了好长时间。郁闷死了。
2:生成镜像的时候,一定要把私服的ip+端口封进去,docker build -t "192.168.155.100:8082/rc-alarm-engine" 这样写。如果不写私服的ip+端口,生成的镜像是传不到私服上的。 请大家注意。
3:maven 总结
一:mvn install 命令会从远程pull镜像。当你的项目配置了<distributionManagement>它会从你的私服上pull数据。 你本地工程有也没用。如果你不配置<distributionManagement>,mvn install 会在你本地找是否有数据。 感觉这个是eclipse和idea自己加进来的功能,不是maven本身的用法。(自己猜的)
二:在本地的.m2下配置的setting.xml文件,<server>是配置push密码的。<mirrors>相当于一个拦截器,拦截pull
<profile>配置pull文件的路径。这个一般最好在工程中配置,因为pull下来的东西都是工程在使用的,跟着工程走感觉更加合理。
具体的setting配置可以上网找找文章看看。
网友评论