Jib構建你的第一個java鏡像

<div data-v-7154d244="" data-id="5b4e9ca35188251b176a5ef1" itemprop="articleBody" class="article-content"><blockquote> <p><a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fgithub.com%2FGoogleContainerTools%2Fjib" rel="nofollow noopener noreferrer">jib Official:GoogleContainerTools/jib</a></p> </blockquote> <blockquote> <p>本文示例完整demo github地址 <a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fgithub.com%2Fmoxingwang%2Fjib" rel="nofollow noopener noreferrer">github.com/moxingwang/…</a></p> </blockquote> <blockquote> <p>想要了解而且使用jib,首先你得知道或者使用過docker,在這個基礎上纔可以明白jib是幹什麼得,解決了什麼問題。</p> </blockquote> <p>首先咱們先看一個例子,如何將一個spring-boot項目簡單容器化,若是你從未操做過,能夠動手本身實現,或者仔細閱讀這篇文章<a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fblog.csdn.net%2Fu010046908%2Farticle%2Fdetails%2F56008445" rel="nofollow noopener noreferrer">第一個 spring Boot 應用經過Docker 來實現構建、運行、發佈</a>。你可能發現若是須要把一個java項目容器化這是一個麻煩和相對複雜的過程,首先你須要編寫dockerfile,而後在build dockefile,如過須要push到registries,還須要通過push操做。雖然build和push仍是很是簡單得。可是寫一個dockerfile真的比較麻煩,學習成本也高,看看官網<a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fdocs.docker.com%2Fengine%2Freference%2Fbuilder%2F%23usage" rel="nofollow noopener noreferrer">Dockerfile reference</a>就不想學了。那麼有沒有簡單得辦法呢,記住幾個簡單得命令就能夠運行了,如同‘mvn spring-boot:run’這麼簡單得命令,這個時候jib出場了,他就是來完成這個偉大得使命。</p> <p>若是你還沒明白jib是用來作什麼事情得,推薦你閱讀<a target="_blank" href="https://link.juejin.im?target=http%3A%2F%2Fwww.infoq.com%2Fcn%2Fnews%2F2018%2F07%2Fgoogle-opensource-Jib" rel="nofollow noopener noreferrer">谷歌開源Java鏡像構建工具Jib</a>的前半部分,或者閱讀<a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fgithub.com%2FGoogleContainerTools%2Fjib" rel="nofollow noopener noreferrer">jib Official:GoogleContainerTools/jib</a>。</p> <p>接下來主要介紹具體如何使用(maven的方式)。</p> <h1 class="heading" data-id="heading-0">將java項目容器化push到registries</h1> <p>jib的引入很是簡單,已maven plugin的方式集成到項目中,只須要在你的項目中引入下面代碼便可</p> <pre><code class="hljs bash copyable" lang="bash">&lt;plugin&gt; &lt;groupId&gt;com.google.cloud.tools&lt;/groupId&gt; &lt;artifactId&gt;jib-maven-plugin&lt;/artifactId&gt; &lt;version&gt;0.9.6&lt;/version&gt; &lt;configuration&gt; &lt;from&gt; &lt;!--base image--&gt; &lt;image&gt;openjdk:alpine&lt;/image&gt; &lt;/from&gt; &lt;to&gt; &lt;!--&lt;image&gt;registry.cn-hangzhou.aliyuncs.com/m65536/jibtest&lt;/image&gt;--&gt; &lt;!--目標鏡像registry地址,爲了方便測試,你須要換成本身的地址,若是你的網絡很差,能夠選用國內加速器,好比阿里雲的--&gt; &lt;image&gt;registry.hub.docker.com/moxingwang/jibtest&lt;/image&gt; &lt;/to&gt; &lt;/configuration&gt; &lt;executions&gt; &lt;execution&gt; &lt;phase&gt;package&lt;/phase&gt; &lt;goals&gt; &lt;goal&gt;build&lt;/goal&gt; &lt;/goals&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt;html

<span class="copy-code-btn">複製代碼</span></code></pre><p>這只是一個最簡單的配置,好比registry認證配置,jvm配置等等,能夠參考github jib詳細說明<a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fgithub.com%2FGoogleContainerTools%2Fjib%2Ftree%2Fmaster%2Fjib-maven-plugin%23from-object" rel="nofollow noopener noreferrer">jib/jib-maven-plugin/</a>。</p>java

<h3 class="heading" data-id="heading-1">構建你的鏡像</h3> <pre><code class="hljs bash copyable" lang="bash">mvn compile jib:build <span class="copy-code-btn">複製代碼</span></code></pre><p>可能你剛剛運行玩這一步就出現錯誤,提示Unauthorized,不用擔憂,這個命令須要把構建出來的image commit而且push到你遠程的registry(我這裏是registry.hub.docker.com),你能夠按照【常見錯誤1】的方法解決問題。</p> <p>若是你的網速慢一點可能會在最後步驟'Finalizing...',不過沒有關係,稍微多等一會就ok,直到'BUILD SUCCESS'出現。最終一個完整的java project被實例化成鏡像而且push到了registry裏。接下來你能夠測試剛剛完成push的鏡像。</p> <p>打開<a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fhub.docker.com%2F" rel="nofollow noopener noreferrer">hub.docker.com/</a>,你會發現你的image已經構建成功。</p> <p></p><figure><img class="lazyload inited loaded" data-src="https://user-gold-cdn.xitu.io/2018/7/18/164ab12624060e6a?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="1280" data-height="505" src="https://user-gold-cdn.xitu.io/2018/7/18/164ab12624060e6a?imageView2/0/w/1280/h/960/format/webp/ignore-error/1"><figcaption></figcaption></figure><p></p> <ul> <li>docker使用鏡像</li> </ul> <pre><code class="hljs bash copyable" lang="bash">docker run -it --rm -p8080:8080 registry.hub.docker.com/moxingwang/jibtest <span class="copy-code-btn">複製代碼</span></code></pre><p></p><figure><img class="lazyload inited loaded" data-src="https://user-gold-cdn.xitu.io/2018/7/18/164ab1262b1552fd?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="1280" data-height="757" src="https://user-gold-cdn.xitu.io/2018/7/18/164ab1262b1552fd?imageView2/0/w/1280/h/960/format/webp/ignore-error/1"><figcaption></figcaption></figure><p></p> <p>一個spring-boot的image這樣就被啓動成功了。本文示例demo中集成了swagger-iu, 項目啓動成功後咱們能夠經過<a target="_blank" href="https://link.juejin.im?target=http%3A%2F%2Flocalhost%3A8080%2Fsw%2Fswagger-ui.html" rel="nofollow noopener noreferrer">http://localhost:8080/sw/swagger-ui.html</a>訪問,能夠成功在瀏覽器打開swagger。</p> <p></p><figure><img class="lazyload inited loaded" data-src="https://user-gold-cdn.xitu.io/2018/7/18/164ab12624440109?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="1280" data-height="430" src="https://user-gold-cdn.xitu.io/2018/7/18/164ab12624440109?imageView2/0/w/1280/h/960/format/webp/ignore-error/1"><figcaption></figcaption></figure><p></p> <h3 class="heading" data-id="heading-2">把鏡像直接構建到本地docker中</h3> <p>使用這種構建方式,首先你要確保本已經安裝docker而且環境變量都配置正確,由於這種方式jib依賴docker 命令執行,你還須要保證已經啓動服務(在terminal中執行 docker --version 可以正確返回)。</p> <pre><code class="hljs bash copyable" lang="bash">mvn compile jib:dockerBuild <span class="copy-code-btn">複製代碼</span></code></pre><p>接下來直接操做,首先查看本地已有images</p> <pre><code class="hljs bash copyable" lang="bash">docker iamges <span class="copy-code-btn">複製代碼</span></code></pre><p></p><figure><img class="lazyload inited" data-src="https://user-gold-cdn.xitu.io/2018/7/18/164ab1262a968e52?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="1280" data-height="677" src="https://img2018.cnblogs.com/blog/1112483/201905/1112483-20190529144513207-1445009970.png"><figcaption></figcaption></figure><p></p> <p>執行mvn compile jib:dockerBuild</p> <p></p><figure><img class="lazyload inited" data-src="https://user-gold-cdn.xitu.io/2018/7/18/164ab1262a69bcf4?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="1280" data-height="680" src="https://user-gold-cdn.xitu.io/2018/7/18/164ab1262a69bcf4?imageView2/0/w/1280/h/960/format/webp/ignore-error/1"><figcaption></figcaption></figure><p></p> <p>能夠看到本地image已經build成功。能夠直接啓動使用</p> <pre><code class="hljs bash copyable" lang="bash">docker run -it --rm -p8080:8080 moxingwang/jibtest <span class="copy-code-btn">複製代碼</span></code></pre><p>啓動成功後一樣能夠直接訪問<a target="_blank" href="https://link.juejin.im?target=http%3A%2F%2Flocalhost%3A8080%2Fsw%2Fswagger-ui.html" rel="nofollow noopener noreferrer">http://localhost:8080/sw/swagger-ui.html</a>swagger頁面。</p> <h1 class="heading" data-id="heading-3">常見錯誤</h1> <h4 class="heading" data-id="heading-4">常見錯誤1 Failed to execute goal com.google.cloud.tools:jib-maven-plugin:0.9.6:build (default-cli) on project jib: Build image failed, perhaps you should set a credential helper name with the configuration '' or set credentials for 'registry.hub.docker.com' in your Maven settings: Unauthorized for registry.hub.docker.com/moxingwang/jibtest: 401 Unauthorized</h4> <blockquote> <p>當你從私有的registries pull或者push的時候須要認證機制。閱讀官方說明按照步驟操做便可。<a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fgithub.com%2FGoogleContainerTools%2Fjib%2Fblob%2Fmaster%2Fjib-maven-plugin%2FREADME.md" rel="nofollow noopener noreferrer">Authentication Methods</a>。 若是幫你本機已經按照docker,那麼操做更簡單,能夠經過docker命令直接登錄registries,而後繼續其餘jib的操做。</p> </blockquote> <ul> <li>registry.hub.docker.com</li> </ul> <pre><code class="hljs bash copyable" lang="bash">docker login --username=你的hub.docker的用戶名 registry.hub.docker.com <span class="copy-code-btn">複製代碼</span></code></pre><ul> <li>registry.cn-hangzhou.aliyuncs.com</li> </ul> <pre><code class="hljs bash copyable" lang="bash">docker login --username=阿里雲docker用戶名 registry.cn-hangzhou.aliyuncs.com <span class="copy-code-btn">複製代碼</span></code></pre><h1 class="heading" data-id="heading-5">推薦閱讀</h1> <ul> <li><a target="_blank" href="https://link.juejin.im?target=https%3A%2F%2Fgithub.com%2FGoogleContainerTools%2Fjib" rel="nofollow noopener noreferrer">jib Official:GoogleContainerTools/jib</a></li> <li><a target="_blank" href="https://link.juejin.im?target=http%3A%2F%2Fwww.infoq.com%2Fcn%2Fnews%2F2018%2F07%2Fgoogle-opensource-Jib" rel="nofollow noopener noreferrer">谷歌開源Java鏡像構建工具Jib</a></li> </ul> </div> 原文地址:https://juejin.im/post/5b4e9c316fb9a04fa01d39d6git

相關文章
相關標籤/搜索