在使用idea开发时,直接docker-maven-plugin插件,把项目编译成docker镜像,而后经过docker:push推送到linux服务器,很是简单,快捷,也避免了手动打包,而后拷贝war包到tomcat的麻烦了。如下是流程:java
在pom文件中加入docker-maven-plugin插件相关配置linux
绑定docker命令到maven各阶段spring
这里须要服务器开启2375端口,后面详细描述docker
具体代码:apache
<!--docker 插件--> <docker.repostory>hub.*****.com</docker.repostory> <docker.registry.name>****</docker.registry.name>
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.14</version> <configuration> <serverId>my-hub</serverId> <registryUrl>http://${docker.repostory}</registryUrl> <!--<pushImage>true</pushImage>--> <imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName> <imageTags> <imageTag>${project.version}</imageTag> <imageTag>latest</imageTag> </imageTags> <dockerHost>http://192.168.*.*:2375</dockerHost> <baseImage>daocloud.io/library/java:openjdk-8u40</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <exposes> <expose>8080</expose> </exposes> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> <!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 --> </plugin> </plugins>
具体代码:json
<!--wagon plugin 配置--> <service-path>/work/${project.artifactId}</service-path> <pack-name>${project.artifactId}.jar</pack-name> <remote-addr>192.168.*.*:*</remote-addr> <remote-username>root</remote-username> <remote-passwd>****</remote-passwd>
<extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.8</version> </extension> </extensions>
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>wagon-maven-plugin</artifactId> <version>1.0</version> <configuration> <fromFile>target/${pack-name}</fromFile> <url><![CDATA[scp://${remote-username}:${remote-passwd}@${remote-addr}${service-path}]]></url> <commands> <!-- Kill Old Process --> <command>kill -9 `ps -ef |grep ${project.artifactId}.jar|grep -v "grep" |awk '{print $2}'`</command> <!-- Restart jar package,write result into renren.log --> <command><![CDATA[nohup java -jar ${service-path}/${pack-name} --spring.profiles.active=test > ${service-path}/renren.log 2>&1 & ]]></command> <command><![CDATA[netstat -nptl]]></command> <command><![CDATA[ps -ef | grep java | grep -v grep]]></command> </commands> <!-- 运行命令 mvn clean package wagon:upload-single wagon:sshexec--> <displayCommandOutputs>true</displayCommandOutputs> </configuration> </plugin>
编辑docker文件:/usr/lib/systemd/system/docker.servicevim
vim /usr/lib/systemd/system/docker.service
修改ExecStart行为下面内容windows
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
从新加载docker配置tomcat
systemctl daemon-reload // 1,加载docker守护线程 systemctl restart docker // 2,重启docker
ss -luntp
systemctl status firewalld
systemctl stop firewalld systemctl disable firewalld
若是开放成功,访问2375端口,会看到以下效果:安全
当咱们 push 镜像到 Docker 仓库中时,无论是共有仍是私有,常常会须要安全认证,登陆完成以后才能够进行操做。固然,咱们能够经过命令行
docker login -u user_name -p password docker_registry_host
登陆,可是对于自动化流程来讲,就不是很方便了。使用 docker-maven-plugin 插件咱们能够很容易实现安全认证。
首先在 Maven 的配置文件 setting.xml 中增长相关 server 配置,主要配置 Docker registry用户认证信息。
路径:
<servers> <server> <id>my-hub</id> <username>**</username> <password>***</password> <configuration> <email>***@163.com</email> </configuration> </server>
先配置镜像images版本c-0311
执行完第一步,控制台看到日志,正在构建、打包jar
接下来,执行第二步,镜像生成完成,且推到了内网了
接下来,去内网看下c-0311版本的镜像已存在,则测试成功了!
问题1:
docker pull 的时候报错 Get https://hub.xxx.com/v1/_ping: dial tcp 192.168.1.8:443: getsockopt: connection refused
内网搭建本身的docker 仓库时遇到这个问题,缘由是docker 默认不支持http的registry , vim /etc/docker/daemon.json 添加 { "insecure-registries":["hub.***.com"] } hub.***.com 这是私有docker仓库域名,与前面配置匹配 重启 docker systemctl restart docker.service
问题2:
#内网连不上harbor线上仓库 [root@localhost ~]# docker login hub.***.com Username: user1 Password: Error response from daemon: Get http://hub.***.com/v1/users/: dial tcp: lookup hub.***.com on 222.86.101.63:53: no such host #甚至连ping都不通时 [root@localhost ~]# ping hub.***.com ping: hub.***.com: 未知的名称或服务 #解决办法,配置hosts [root@localhost ~]# vi /etc/hosts
具体操做详见另一篇博客:Centos7安装Docker镜像仓库Harbor1.5.3
在域名的服务器上搭建了镜像仓库Harbor后,须要确保如下几个地方都正确:
a、在https://hub.***.com,注册普通帐号,而后新建普通帐号的项目,用以保存镜像
b、把注册好的harbor帐号密码,配置在maven的setting.xml上
c、在idea的pom设定推送的地址为 hub.***.com,与前面配置好的Harbor地址一致
把 docker-maven-plugin 下的 pushImage标签的注释放开
<pushImage>true</pushImage>
须要确保 ${docker.repostory} 的指与线上hub仓库地址一致了
d、须要保证内网以及开发的windows环境能访问的通线上的镜像仓库地址,配置hosts文件
这里贴一个,若是碰上没有权限修改hosts文件的解决办法:
都OK后,会发现 docker:build 命令,控制台会推送成功,也可到线上仓库去检查
线上环境直接 docker pull 拉去该镜像便可