方法2:使用Jenkins構建Docker鏡像 --SpringCloud


前提意義:
SpringCloud微服務里包含多個文件夾,拉取倉庫的所有代碼,然后過根據選項參數使用maven編譯打包指定目錄的jar,然后再根據這個目錄的Dockerfile文件制作Docker鏡像

采用這種結構,代碼的pom.xml文件需要修改

大致步驟流程是:
開發人員提交代碼到Gogs倉庫,觸發webhooks鈎子,然后Jenkins自動執行任務( 這一步可以刪除鈎子,手動進行操作),從整個Gogs倉庫拉取代碼,但是只編譯打包其中的一個文件夾項目,生成jar包,然后根據文件夾項目根目錄下的Dockfile文件使用遠程Docker(其實就是本機安裝的docker)制作鏡像。

1. SpringCloud項目結構

Git倉庫是整個項目,但是根據選項參數只編譯打包spring-cloud-eureka-server-demo文件夾

注意Dockerfile文件的位置,跟方法1的所在位置不同,相應的Dockfile文件中使用jar包的位置也不同,這個也需要注意

Dockerfile文件內容

FROM java:8
MAINTAINER sandu <1103324414@qq.com>
VOLUME /tmp
ADD spring-cloud-eureka-server-demo-1.0-SNAPSHOT.jar /eureka-server-demo.jar
ENTRYPOINT ["java","-Xmx200m","-Xms200m","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka-server-demo.jar"]
EXPOSE 9011

pom.xml文件新增內容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jarjune</groupId>
    <artifactId>spring-cloud-eureka-server-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>com.jarjune</groupId>
        <artifactId>spring-cloud-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!-- tag::plugin[]  新增的內容-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.3</version>
                <configuration>
                    <imageName>tms/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->
            
        </plugins>
    </build>


</project>

2. Docker配置

開啟遠程訪問:

vim /lib/systemd/system/docker.service
# 添加下面這行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

systemctl daemon-reload
systemctl docker restart

配置國內163源,配置Harbor私有倉庫地址,避免出現無法登陸遠程倉庫的情況

vim /etc/docker/daemon.json
{
   "registry-mirrors": ["http://hub-mirror.c.163.com"],
    "insecure-registries": ["https://192.168.75.12"]
}

jenkins操作界面的shell命令使用的用戶是jenkins用戶,但是需要訪問到docker的文件,沒有相關權限造成的,采用最簡單的辦法,修改相關文件的權限,使jenkins用戶可以進行訪問

chmod 777 /var/run/docker.sock

3. Jenkins配置

安裝docker插件
系統管理---系統設置---雲,添加docker配置信息,具體如下圖:

4. 工程中的設置

詳看截圖:

shell命令:

cd ${WORKSPACE}/${module_filename} 
/usr/local/apache-maven-3.6.2/bin/mvn clean package docker:build -Dmaven.test.skip=true  # 重要步驟
docker login http://192.168.75.12 -u admin -p harbor12345
docker tag eureka-server:0.5 192.168.75.12/springcloud/eureka-server:0.7
docker push 192.168.75.12/springcloud/eureka-server:0.7

5. 步驟截圖

7. 查看生成的docker鏡像並運行


[root@bogon ~]# docker run -p 9011:9011 -d tms/spring-cloud-eureka-server-demo
feb37c7360de06a792542bed63de8fb3f003d9aff8af563022f9af13951a5499
[root@bogon ~]# docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
feb37c7360de        tms/spring-cloud-eureka-server-demo   "java -Xmx200m -Xms2…"   4 seconds ago       Up 3 seconds        0.0.0.0:9011->9011/tcp   kind_panini

6. 驗證

使用瀏覽器訪問: http://本機ip:9011


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM