微服務Docker打包 現在的微服務時代,你的代碼沒個微服務、分散式人家都會覺得低端,當然!對於我們開發人員來說,掌握這些技術意味著漲薪。 我們項目中用到了多個微服務,我們上一節課程打包用的是手動上傳,但是很麻煩,有沒有更好的方式呢,是有的,我們可以直接通過idea將我們的微服務打包成Docke ...
微服務Docker打包
現在的微服務時代,你的代碼沒個微服務、分散式人家都會覺得低端,當然!對於我們開發人員來說,掌握這些技術意味著漲薪。
我們項目中用到了多個微服務,我們上一節課程打包用的是手動上傳,但是很麻煩,有沒有更好的方式呢,是有的,我們可以直接通過idea將我們的微服務打包成Docker鏡像,並推送到Docker倉庫中
這裡我們採用jib-maven-plugin 來進行來構建容器化的spring boot應用程式,Jib可以讓不寫Dockerfile就能實現Docker打包
什麼是Jib
Jib 是 Google 開發的可以直接構建 Java 應用的 Docker 和 OCI 鏡像的類庫,以 Maven 和 Gradle 插件形式提供。
Jib帶來的是,它允許您通過簡單地將插件添加到您選擇的構建工具(Maven或Gradle)來創建容器,沒有額外的文件,只需幾行配置,它處理將應用程式打包到容器映像的所有步驟。
Jib是來自Google的開源Java容器,它允許Java開發人員使用他們所知道的Java工具構建容器,它不需要您編寫Dockerfile或安裝了docker,它直接集成到Maven和Gradle中。
和傳統的插件區別
Docker 構建流程
在“傳統”Java到Docker映像構建流程中,我們需要安裝Dockerfile和docker守護進程,在Jib構建流程中,您只需要插件項目的構建文件。
Jib構建流程
通過 Jib,Java 開發者可以使用他們熟悉的 Java 工具來構建容器。Jib 是一個快速而簡單的容器鏡像構建工具,它負責處理將應用程式打包到容器鏡像中所需的所有步驟。它不需要你編寫 Dockerfile 或安裝 Docker,而且可以直接集成到 Maven 和 Gradle中 —— 只需要將插件添加到構建中,就可以立即將 Java 應用程式容器化。
準備工作
設置Horbor用戶許可權
我們要將idea的微服務推送到Harbor,並且用
itcast
的用戶,所有我們要設置我們的itcast
用戶是開發者
pom文件配置jib
對於應用程式的基本本地存儲鏡像,請在pom.xml以下內容中配置jib-maven-plugin
公共屬性配置
在properties中配置
harbor
的共有配置
<properties>
<!--harbor 倉庫地址-->
<docker.registry.url>itcastharbor.com</docker.registry.url>
<!--harbor 的項目名稱-->
<docker.registry.name>library</docker.registry.name>
<!--harbor賬號-->
<docker.registry.username>itcast</docker.registry.username>
<!--harbor密碼-->
<docker.registry.password>Qwert123</docker.registry.password>
</properties>
編譯配置插件配置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.8.0</version>
<configuration>
<allowInsecureRegistries>true</allowInsecureRegistries>
<!--from節點用來設置鏡像的基礎鏡像,相當於Docerkfile中的FROM關鍵字-->
<from>
<!--使用openjdk官方鏡像,tag是:8-jdk-alpine,表示鏡像的操作系統是alpine,裝好了jdk8-->
<image>openjdk:8-jdk-alpine</image>
</from>
<to>
<!--鏡像名稱和tag,使用了mvn內置變數${project.version},表示當前工程的version-->
<image>${docker.registry.url}/${docker.registry.name}/${project.artifactId}:${project.version}
</image>
<tags>
<!--版本號-->
<tag>${project.version}</tag>
</tags>
<!--harbor的認證信息-->
<auth>
<username>${docker.registry.username}</username>
<password>${docker.registry.password}</password>
</auth>
</to>
<!--容器相關的屬性-->
<container>
<jvmFlags>
<!--一些啟動參數-->
<jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag>
</jvmFlags>
<!--掛載volume的配置-->
<volumes>
<volume>/tmp</volume>
<volume>/logs</volume>
</volumes>
<ports>
<!--暴漏埠號-->
<port>8080</port>
</ports>
<!--微服務的啟動類-->
<mainClass>com.heima.test.Application</mainClass>
<format>OCI</format>
<!--使用該參數將鏡像的創建時間與系統時間對其-->
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
</container>
</configuration>
<executions>
<!--執行打包配置-->
<execution>
<id>jib-maven-plugin</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
執行構建
然後在項目根目錄執行
mvn clean compile jib:build
就可以了
我們看到已經推送成功了
harbor倉庫中查看
通過功能變數名稱訪問harbor,我們看我們的
library
裡面的鏡像倉庫
點進去就可以看到我們剛剛推送的鏡像
以及鏡像的詳細信息
其他的微服務上傳
微服務打包
這裡我們也將其他微服務上傳到倉庫,步驟同上
倉庫中查看鏡像
在我們的倉庫中查看鏡像,我們看到鏡像都已經上傳到倉庫中了
harbor 測試
刪除本地鏡像
可以通過
docker rmi 鏡像ID
刪除本地鏡像
docker rm -f learn-docker-storage
docker rmi 192.168.64.153/library/learn-docker-storage:0.0.3
運行harbor 中的鏡像
我們把我們的所有微服務都上傳到了倉庫中,我們以一個完整的項目運行docker
運行learn-docker-storage服務
執行運行命令
docker run -d \
-v /tmp/data/logs:/logs \
--name learn-docker-storage \
--network=learn-docker-network \
manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT
因為我們是基於內部網路訪問 不需要暴漏介面了
訪問微服務測試
curl http://192.168.64.152:8080/userinfo/10001 | python -m json.tool
運行learn-docker-web服務
執行運行命令
docker run -d \
--name learn-docker-web \
--network=learn-docker-network \
manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOT
該微服務也是內部服務不需要暴漏埠,並且沒有配置日誌輸出所有不掛載日誌路徑
運行learn-docker-gateway服務
執行運行命令
docker run -d \
-p 8888:8888 \
--name learn-docker-gateway \
--network=learn-docker-network \
manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT
因為網關對外需要暴漏埠,所有需要開放
8888
埠
查看nacos註冊的微服務
我們發現我們的三個服務都已經註冊進去了
訪問測試微服務
因為我們存儲服務的
8003
埠沒有暴漏出來,無法訪問,我們需要通過網關進行訪問
curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool
本文由
傳智教育博學谷
教研團隊發佈。如果本文對您有幫助,歡迎
關註
和點贊
;如果您有任何建議也可留言評論
或私信
,您的支持是我堅持創作的動力。轉載請註明出處!