idea使用docker-maven-plugin外掛將專案編譯為docker映象到遠端linux伺服器
阿新 • • 發佈:2019-03-11
在使用idea開發時,直接docker-maven-plugin外掛,把專案編譯成docker映象,然後通過docker:push推送到linux伺服器,非常簡單,快捷,也避免了手動打包,然後拷貝war包到tomcat的麻煩了。以下是流程:
1、先配置docker-maven-plugin外掛
在pom檔案中加入docker-maven-plugin外掛相關配置
繫結docker命令到maven各階段
這裡需要伺服器開啟2375埠,後面詳細描述
具體程式碼:
<!--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>
2、配置docker-wagon-plugin外掛(非本次方式必須,可以安裝,是另外一種部署方式,直接通過wagon命令,直接把jar包推到伺服器,然後替換)
具體程式碼:
<!--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>
3、完了後,可以在maven-project看到docker外掛和wagon外掛
4、需要在上面配置的Linux伺服器,通過docker開啟2375埠,提供外部訪問docker
編輯docker檔案:/usr/lib/systemd/system/docker.service
vim /usr/lib/systemd/system/docker.service
修改ExecStart行為下面內容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
重新載入docker配置
systemctl daemon-reload // 1,載入docker守護執行緒
systemctl restart docker // 2,重啟docker
5、關閉防火牆
ss -luntp
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
如果開放成功,訪問2375埠,會看到如下效果:
6、安全認證配置
當我們 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>
7、測試、驗證
先配置映象images版本c-0311
執行完第一步,控制檯看到日誌,正在構建、打包jar
接下來,執行第二步,映象生成完成,且推到了內網了
接下來,去內網看下c-0311版本的映象已存在,則測試成功了!
8、相關報錯,以及解決辦法:
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
9、搭建docker私有