真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Dockerfile中multi-stage(多階段構(gòu)建)詳解-創(chuàng)新互聯(lián)

前言

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的徽州網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

Docker的口號是Build,Ship,and Run Any App,Anywhere,在我們使用 Docker 的大部分時候,的確能感覺到其優(yōu)越性,但是往往在我們 Build 一個應(yīng)用的時候,是將我們的源代碼也構(gòu)建進(jìn)去的,這對于類似于 golang 這樣的編譯型語言肯定是不行的,因為實際運行的時候我只需要把最終構(gòu)建的二進(jìn)制包給你就行,把源碼也一起打包在鏡像中,需要承擔(dān)很多風(fēng)險,即使是腳本語言,在構(gòu)建的時候也可能需要使用到一些上線的工具,這樣無疑也增大了我們的鏡像體積。

在應(yīng)用了容器技術(shù)的軟件開發(fā)過程中,控制容器鏡像的大小可是一件費時費力的事情。如果我們構(gòu)建的鏡像既是編譯軟件的環(huán)境,又是軟件最終的運行環(huán)境,這是很難控制鏡像大小的。所以常見的配置模式為:分別為軟件的編譯環(huán)境和運行環(huán)境提供不同的容器鏡像。比如為編譯環(huán)境提供一個 Dockerfile.build,用它構(gòu)建的鏡像包含了編譯軟件需要的所有內(nèi)容,比如代碼、SDK、工具等等。同時為軟件的運行環(huán)境提供另外一個單獨的 Dockerfile,它從 Dockerfile.build 中獲得編譯好的軟件,用它構(gòu)建的鏡像只包含運行軟件所必須的內(nèi)容。這種情況被稱為構(gòu)造者模式(builder pattern),本文將介紹如何通過 Dockerfile 中的 multi-stage 來解決構(gòu)造者模式帶來的問題。

常見的容器鏡像構(gòu)建過程

比如我們創(chuàng)建了一個 GO 語言編寫了一個檢查頁面中超級鏈接的程序 app.go(請從 sparkdev  (本地下載)獲取本文相關(guān)的代碼):

package main
import (
 "encoding/json"
 "fmt"
 "log"
 "net/http"
 "net/url"
 "os"
 "strings"
 "golang.org/x/net/html"
)
type scrapeDataStore struct {
 Internal int `json:"internal"`
 External int `json:"external"`
}
func isInternal(parsedLink *url.URL, siteUrl *url.URL, link string) bool {
 return parsedLink.Host == siteUrl.Host || strings.Index(link, "#") == 0 || len(parsedLink.Host) == 0
}
func main() {
 urlIn := os.Getenv("url")
 if len(urlIn) == 0 {
 urlIn = "https://www.cnblogs.com/"
 }
 resp, err := http.Get(urlIn)
 scrapeData := &scrapeDataStore{}
 tokenizer := html.NewTokenizer(resp.Body)
 end := false
 for {
 tt := tokenizer.Next()
 switch {
 case tt == html.StartTagToken:
 token := tokenizer.Token()
 switch token.Data {
 case "a":
 for _, attr := range token.Attr {
  if attr.Key == "href" {
  link := attr.Val
  parsedLink, parseLinkErr := url.Parse(link)
  if parseLinkErr == nil {
  if isInternal(parsedLink, siteUrl, link) {
  scrapeData.Internal++
  } else {
  scrapeData.External++
  }
  }
  if parseLinkErr != nil {
  fmt.Println("Can't parse: " + token.Data)
  }
  }
 }
 break
 }
 case tt == html.ErrorToken:
 end = true
 break
 }
 if end {
 break
 }
 }
 data, _ := json.Marshal(&scrapeData)
 fmt.Println(string(data))
}

網(wǎng)站名稱:Dockerfile中multi-stage(多階段構(gòu)建)詳解-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://weahome.cn/article/cspeis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部