IDEA直連服務器,進行項目Docker部署,實現(xiàn)一鍵部署、啟動

作者:xcbeyond
瘋狂源自夢想,技術成就輝煌!微信公眾號:《程序猿技術大咖》號主,專注后端開發(fā)多年,擁有豐富的研發(fā)經(jīng)驗,樂于技術輸出、分享,現(xiàn)階段從事微服務架構(gòu)項目的研發(fā)工作,涉及架構(gòu)設計、技術選型、業(yè)務研發(fā)等工作。對于Java、微服務、數(shù)據(jù)庫、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗。

1、前言

     在項目中使用docker后,通過docker的方式來啟動系統(tǒng),需要經(jīng)過編譯、打jar包、打鏡像、啟動等階段。在各種自動化工具的出現(xiàn),對打包、部署等工作帶來了便利,一般都會選擇git+Jenkins方式進行自動化部署。在面對本地開發(fā)調(diào)試階段,如果過分的依賴自動化工具,會顯得并不是那么的方便,比如:頻繁的代碼調(diào)整修改,卻要進行代碼的git提交、登錄Jenkins進行部署,這樣的頻繁操作,甚至會讓你發(fā)瘋的。

     在開發(fā)階段,對應開發(fā)人員接觸最多的就是開發(fā)工具IDE,如:IDEA中就提供了好多不錯的插件供開發(fā)人員使用。針對上述問題,IDEA也提供的一些插件來解決這類問題。

    本文主要來講述,如何在IDEA中通過插件來部署docker項目,方便開發(fā)階段的調(diào)試部署工作。

 
2、準備工作

    Centos7 docker環(huán)境
    IDEA開發(fā)環(huán)境
    SpringBoot項目(其他類型的項目均可)

(如果你還不對安裝docker環(huán)境,或有疑問,可參考之前的一篇文件《CentOS7 下Docker安裝、啟動》)

 
3、IDEA直連docker服務器
3.1 開啟docker遠程訪問

為了確保本地IDEA能夠訪問服務器上的docker環(huán)境,則需要開發(fā)對docker的2375端口的訪問權限。

(1) 打開docker服務啟動配置文件/usr/lib/systemd/system/docker.service,在ExecStart=中追加-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock,如下:

(2) 重啟docker環(huán)境

systemctl daemon-reload

systemctl start docker

(3) 關閉防火墻

關閉防火墻:

   systemctl stop firewalld.service 

禁止firewall開機啟動:

   systemctl disable firewalld.service

(4) 本地telnet驗證2375端口

在本地(即:IDEA開發(fā)環(huán)境機器)cmd中,通過telnet命令連接docker環(huán)境的2375端口,如下:

顯示如下,則表明可以遠程訪問。

3.2 IDEA上安裝docker插件

    安裝Docker integration插件,如果已安裝,請忽略本步驟。

    打開File->Settings->Plugins,搜索Docker,可以看見Docker integration插件,安裝提示進行一步步安裝,安裝完畢重啟IEDA。

重啟IDEA后,打開File->Settings->Build,Execution,Deployment,如果有Docker列表,則說明插件安裝成功。

3.3 連接配置docker服務器

    打開File->Settings->Build,Execution,Deployment->Docker,按照下圖進行配置即可。

說明:步驟③ 自定義命名即可

          步驟④ 填寫docker環(huán)境地址,格式為:tcp://ip:2375 URL填寫完后,進行自動驗證,并顯示步驟⑤成功提示。






3.4 直連docker服務器使用

    在IDEA中,如下圖操作,即可直連docker服務器,可查看docker環(huán)境上所有鏡像、容器,并支持重啟、刪除等一系列操作,更多功能使用時再細細挖掘吧。

 
4、IDEA中項目Docker部署
4.1 使用docker-maven-plugin插件

     在項目pom.xml中使用docker-maven-plugin插件,便可完成從編譯、打包、打鏡像、部署等流程。在pom.xml  <build><plugins>...</plugins></build>中添加docker-maven-plugin插件配置,如下:

    <!--使用docker-maven-plugin插件-->
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.0.0</version>
     
        <!--將插件綁定在某個phase執(zhí)行-->
        <executions>
            <execution>
                <id>build-image</id>
                <!--將插件綁定在package這個phase上。也就是說,用戶只需執(zhí)行mvn package ,就會自動執(zhí)行mvn docker:build-->
                <phase>package</phase>
                <goals>
                    <goal>build</goal>
                </goals>
            </execution>
        </executions>
     
        <configuration>
            <!--指定生成的鏡像名-->
            <imageName>${project.artifactId}</imageName>
            <!--指定標簽-->
            <imageTags>
                <imageTag>latest</imageTag>
            </imageTags>
     
            <!-- 指定 Dockerfile 路徑-->
            <dockerDirectory>${project.basedir}</dockerDirectory>
            <!--指定遠程docker環(huán)境地址-->
            <dockerHost>http://192.168.1.1:2375</dockerHost>
            <!-- 復制jar包到docker容器指定目錄配置 -->
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <!--jar包所在的路徑,此處配置的 即對應target 目錄-->
                    <directory>${project.build.directory}</directory>
                    <!-- 需要包含的jar包,這里對應的是 Dockerfile中添加的文件名 -->
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>

4.2 創(chuàng)建Dockerfile文件

     在工程根目錄下新建Dockerfile文件,如下:

    FROM openjdk:8-alpine
    #擁有者
    LABEL maintainer "xcbeyond"
     
    VOLUME [ "/tmp" ]
    # app.jar是你項目的jar包
    COPY app.jar /app.jar
    #對外暴露的端口
    EXPOSE 1000
     
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

4.3 Build

     在IDEA的右邊找到Maven Projects,找到Lifecycle,雙擊package打包,第一次打包比較慢,需要耐心等等。

 

看到下面就說明成功了

 

4.4 部署、啟動

如下操作創(chuàng)建docker容器,并啟動。

    Image ID: 是打包生成的鏡像名
    Container name: 容器名字,自定義即可。
    Bind ports: 是docker對外暴露的端口

在IDEA中部署、啟動后,可登陸docker環(huán)境,通過docker ps命令可以發(fā)現(xiàn)容器已經(jīng)啟動了。

 

是不是很帥、很方便,具體怎么使用,就根據(jù)實際需求進行靈活使用了。