IDEA快速部署Spring?Boot?項(xiàng)目到Docker的實(shí)現(xiàn)方法
一、IDEA 連接 Docker
我們通常使用TCP的方式連接Docker,所以我們需要配置Docker并開(kāi)放端口,如果是本地虛擬機(jī),可以簡(jiǎn)單使用http的方式進(jìn)行連接(不建議),如果你是遠(yuǎn)程服務(wù)器,請(qǐng)務(wù)必采用安全的連接方式(https);
自己的虛擬機(jī)
如果是自己的虛擬機(jī),可以不需要?jiǎng)?chuàng)建CA證書(shū)??梢允褂?code>http://ip:端口號(hào)的形式連接。
:one: 編輯docker.service文件
vim /usr/lib/systemd/system/docker.service
找到 [Service] 節(jié)點(diǎn),修改 ExecStart 屬性,增加 -H tcp://0.0.0.0:2375

這樣相當(dāng)于對(duì)外開(kāi)放的是 2375 端口,當(dāng)然也可以根據(jù)自己情況修改成其他的。
:two: 重新加載Docker配置生效
systemctl daemon-reload systemctl restart docker
:three: 測(cè)試是否能訪問(wèn)
#瀏覽器訪問(wèn) ip:2375/vsersion
如果訪問(wèn)成功證明已配置成功。
如果無(wú)妨訪問(wèn),請(qǐng)檢查防火墻是否開(kāi)放2375端口:
#查看防火墻開(kāi)放列表 firewall-cmd --list-ports #增加2375端口 firewall-cmd --zone=public --add-port=2375/tcp --permanent #重啟防火墻 firewall-cmd --reload
:four: 通過(guò)IDEA連接

遠(yuǎn)程服務(wù)器
**如果是遠(yuǎn)程服務(wù)器,一定要?jiǎng)?chuàng)建CA證書(shū)。**使用https://ip:端口號(hào)的形式連接。(否則你的Docekr任何人都可以推送鏡像,分分鐘取挖礦)
下面我將命令都抽離出來(lái),方便運(yùn)行。[ip]替換為你的服務(wù)器ip
(如果想看更詳細(xì)的分步驟運(yùn)行,請(qǐng)看[這篇文章](Docker開(kāi)啟遠(yuǎn)程安全訪問(wèn)),但是注意其中5.2章節(jié)的一個(gè)錯(cuò)誤:extfile.cnf 這里不能用官方給的,不要DNS)
#1、創(chuàng)建CA私鑰和CA公鑰 mkdir -p /usr/local/ca cd /usr/local/ca #2.然后在Docker守護(hù)程序的主機(jī)上,生成CA私鑰和公鑰:執(zhí)行完后,這里會(huì)要我們輸入密碼,請(qǐng)牢記,例如我這里輸入wang123 openssl genrsa -aes256 -out ca-key.pem 4096 #3.補(bǔ)全CA證書(shū)信息,執(zhí)行后需要輸入,訪問(wèn)密碼、國(guó)家、省、市、組織名稱、單位名稱、CommonName、郵箱等 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem #4.生成server-key.pem openssl genrsa -out server-key.pem 4096 #5.用CA簽署公鑰: openssl req -subj "/CN=[ip]" -sha256 -new -key server-key.pem -out server.csr #6.匹配白名單,允許指定的ip可以連接到服務(wù)器中的docker,這里允許所有攜帶ca的ip echo subjectAltName = IP:[ip],IP:0.0.0.0 >> extfile.cnf #7.將Docker守護(hù)程序密鑰的擴(kuò)展使用屬性設(shè)置為僅用于服務(wù)器身份驗(yàn)證: echo extendedKeyUsage = serverAuth >> extfile.cnf #8.生成簽名證書(shū),執(zhí)行完后需要輸入密碼,上面我們?cè)O(shè)置的密碼(wang123) openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem -extfile extfile.cnf #9. 生成客戶端的key.pem openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client' -new -key key.pem -out client.csr #10.使秘鑰適合客戶端身份驗(yàn)證 echo extendedKeyUsage = clientAuth >> extfile.cnf echo extendedKeyUsage = clientAuth > extfile-client.cnf #11.生成簽名證書(shū),執(zhí)行完后需要輸入密碼 openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out cert.pem -extfile extfile-client.cnf #12.刪除不需要的文件 rm -v client.csr server.csr extfile.cnf extfile-client.cnf #13.設(shè)置權(quán)限 chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem #14.歸集服務(wù)器證書(shū) cp server-*.pem /etc/docker/ cp ca.pem /etc/docker/
創(chuàng)建完證書(shū)之后,我們需要修改Docker配置:
#使Docker守護(hù)程序僅接收來(lái)自提供CA信任的證書(shū)的客戶端的鏈接 vim /lib/systemd/system/docker.service
將 ExecStart 屬性值進(jìn)行替換:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock復(fù)制代碼
重新加載daemon并重啟docker
systemctl daemon-reload systemctl restart docker
注意,請(qǐng)檢查防火墻和安全組是否都開(kāi)放了此端口:2375
然后將ca證書(shū)下載到本地:

配置完就可以取IDEA的Docker中進(jìn)行配置:

二、Maven插件與Dockerfile
docker-maven-plugin
我們IDEA已經(jīng)可以連接Docker,我們想在package的時(shí)候,把打包鏡像推送到Docker當(dāng)中,我們需要配置Maven插件:
<plugin><!--制作docker鏡像的maven插件-->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${project.artifactId}</imageName><!--鏡像名-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<dockerCertPath>./ca</dockerCertPath><!--證書(shū)所在的目錄-->
<dockerDirectory>${project.basedir}</dockerDirectory><!--Dockerfile所在的目錄-->
<dockerHost>https://ip:2375</dockerHost><!--docker所在的宿主機(jī)地址-->
<resources>
<resource><!--這里配置的就是打包后jar所在的位置-->
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>Dockerfile
FROM java:8 #作者 MAINTAINER wangze #掛在 VOLUME /tmp #將jar包添加到容器中并更名 ADD project-manage-service-0.0.1-SNAPSHOT.jar pms.jar #運(yùn)行jar RUN bash -c 'touch /pms.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/pms.jar"]
三、項(xiàng)目打包上傳鏡像
當(dāng)我們執(zhí)行package操作后,會(huì)自動(dòng)將jar包作為image上傳到Docker中:

可以在IDEA右下角的服務(wù)中,找到Docker連接,查看鏡像

四、容器的創(chuàng)建與運(yùn)行
容器的創(chuàng)建
先找到剛才打包的鏡像:

然后右鍵創(chuàng)建一個(gè)容器:
這里端口格式為:主機(jī)端口:容器端口
例如你的項(xiàng)目在容器中是8080端口,你主機(jī)的8080已經(jīng)被占用,你可以這樣寫(xiě):
#訪問(wèn)的時(shí)候 http://ip:8090/ 8090:8080

運(yùn)行容器,我們可以看到對(duì)應(yīng)的日志:

環(huán)境的檢查
首先檢查服務(wù)器的防火墻:
firewall-cmd --list-ports
如果主機(jī)端口沒(méi)有開(kāi)放,則開(kāi)放防火墻:
firewall-cmd --zone=public --add-port=8090/tcp --permanent #重啟防火墻 firewall-cmd --reload
PS: 如果是遠(yuǎn)程服務(wù)器,記得配置安全組
訪問(wèn)項(xiàng)目檢驗(yàn)
訪問(wèn)項(xiàng)目的地址,可以正常訪問(wèn),即為成功發(fā)布
參考文章:
Docker開(kāi)啟遠(yuǎn)程安全訪問(wèn)
到此這篇關(guān)于IDEA快速部署Spring Boot 項(xiàng)目到Docker的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)IDEA部署Spring Boot到Docker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在Idea中使用Docker部署SpringBoot項(xiàng)目的詳細(xì)步驟
- java通過(guò)Idea遠(yuǎn)程一鍵部署springboot到Docker詳解
- 淺析SpringBoot打包上傳到docker并實(shí)現(xiàn)多實(shí)例部署(IDEA版)
- idea快速實(shí)現(xiàn)將SpringBoot項(xiàng)目打包Docker鏡像并部署
- 基于idea把springboot項(xiàng)目部署到docker
- IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署
- IDEA 通過(guò)docker插件發(fā)布springboot項(xiàng)目的詳細(xì)教程
- idea整合docker快速部署springboot應(yīng)用的詳細(xì)過(guò)程
- IDEA通過(guò)Docker插件部署SpringBoot項(xiàng)目的過(guò)程詳解
- IDEA集成docker部署springboot項(xiàng)目的全過(guò)程
相關(guān)文章
Java?Web開(kāi)發(fā)環(huán)境配置詳解
這篇文章主要介紹了Java?Web開(kāi)發(fā)環(huán)境配置詳解,對(duì)初學(xué)者是個(gè)必備的過(guò)程,有需要的可以了解一下2016-11-11
java中優(yōu)化大量if...else...方法總結(jié)
在我們平時(shí)的開(kāi)發(fā)過(guò)程中,經(jīng)??赡軙?huì)出現(xiàn)大量If else的場(chǎng)景,代碼顯的很臃腫,非常不優(yōu)雅,下面這篇文章主要給大家介紹了關(guān)于java中優(yōu)化大量if...else...方法的相關(guān)資料,需要的朋友可以參考下2023-03-03
詳解java開(kāi)發(fā)webservice的幾種方式
webservice的應(yīng)用已經(jīng)越來(lái)越廣泛了,下面介紹幾種在Java體系中開(kāi)發(fā)webservice的方式,有興趣的可以了解一下。2016-11-11

