最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

構(gòu)建go鏡像實(shí)現(xiàn)過(guò)程全面講解

 更新時(shí)間:2023年12月08日 09:36:48   作者:南哥  
這篇文章主要為大家介紹了構(gòu)建go鏡像實(shí)現(xiàn)過(guò)程全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

概述

在本教程中,你將生成一個(gè)容器映像。該映像包括運(yùn)行應(yīng)用程序所需的一切:編譯的應(yīng)用程序二進(jìn)制文件、運(yùn)行時(shí)、庫(kù)以及應(yīng)用程序所需的所有其他資源。

前置條件

若要完成本教程,需要滿足以下條件:

  • golang 1.19+
  • 本地安裝了docker
  • Git 客戶端

程序

該應(yīng)用程序提供兩個(gè) HTTP endpoint:

  • / 返回符號(hào)<3
  • /health 返回{ "Status" : "OK"}

應(yīng)用程序偵聽(tīng)由環(huán)境變量 PORT 定義的 TCP 端口。缺省值為 8080

該應(yīng)用程序的完整源代碼位于 GitHub 上:github.com/docker/docker-gs-ping。我們鼓勵(lì)您fork 它并隨心所欲地嘗試它。

要繼續(xù),請(qǐng)將應(yīng)用程序存儲(chǔ)庫(kù)克隆到本地計(jì)算機(jī):

git clone https://github.com/docker/docker-gs-ping

如果您熟悉 Go,該應(yīng)用程序 main.go 的文件非常簡(jiǎn)單

package main
import (
    "net/http"
    "os"
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)
func main() {
    e := echo.New()
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.GET("/", func(c echo.Context) error {
        return c.HTML(http.StatusOK, "Hello, Docker! <3")
    })
    e.GET("/health", func(c echo.Context) error {
        return c.JSON(http.StatusOK, struct{ Status string }{Status: "OK"})
    })
    httpPort := os.Getenv("PORT")
    if httpPort == "" {
        httpPort = "8080"
    }
    e.Logger.Fatal(e.Start(":" + httpPort))
}
// Simple implementation of an integer minimum
// Adapted from: https://gobyexample.com/testing-and-benchmarking
func IntMin(a, b int) int {
    if a < b {
        return a
    }
    return b
}

冒煙測(cè)試應(yīng)用程序

啟動(dòng)應(yīng)用程序并確保它正在運(yùn)行。打開(kāi)終端并導(dǎo)航到將項(xiàng)目存儲(chǔ)庫(kù)克隆到的目錄。從現(xiàn)在開(kāi)始,本指南將此目錄稱為項(xiàng)目目錄

go run main.go

這應(yīng)該將服務(wù)器編譯并啟動(dòng)為前臺(tái)應(yīng)用程序,輸出橫幅,如下圖所示。

____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.10.2
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
a?¨ http server started on [::]:8080

通過(guò)訪問(wèn) 上的 http://localhost:8080 應(yīng)用程序來(lái)運(yùn)行快速冒煙測(cè)試。您可以使用自己喜歡的 Web 瀏覽器,甚至可以在終端中使用 curl 命令:

curl http://localhost:8080/
Hello, Docker! <3

現(xiàn)在,您可以將其容器化了。

為應(yīng)用程序創(chuàng)建 Dockerfile

告訴 Docker 要為應(yīng)用程序使用哪個(gè)基礎(chǔ)映像:

# syntax=docker/dockerfile:1
FROM golang:1.19

Docker 鏡像可以從其他鏡像繼承。因此,您可以使用已經(jīng)具有所有必要工具和庫(kù)的官方 Go 映像來(lái)編譯和運(yùn)行 Go 應(yīng)用程序,而不是從頭開(kāi)始創(chuàng)建自己的基礎(chǔ)映像。

現(xiàn)在,您已經(jīng)為即將推出的容器映像定義了基礎(chǔ)映像,可以開(kāi)始在它之上進(jìn)行構(gòu)建

若要在運(yùn)行其余命令時(shí)簡(jiǎn)化操作,請(qǐng)?jiān)谝傻挠诚裰袆?chuàng)建一個(gè)目錄。這也指示 Docker 使用此目錄作為所有后續(xù)命令的默認(rèn)目標(biāo)。這樣你就不必在 中鍵入完整的文件路徑 Dockerfile ,相對(duì)路徑將基于此目錄

WORKDIR /app

通常,一旦你下載了一個(gè)用 Go 編寫(xiě)的項(xiàng)目,你要做的第一件事就是安裝編譯它所需的模塊。請(qǐng)注意,基礎(chǔ)映像已包含工具鏈,但源代碼尚未包含在其中。

因此,在運(yùn)行映像 go mod download 之前,需要將 go.mod 和 go.sum 文件復(fù)制到其中。使用命令 COPY 執(zhí)行此操作。

在最簡(jiǎn)單的形式中,該 COPY 命令采用兩個(gè)參數(shù)。第一個(gè)參數(shù)告訴 Docker 要將哪些文件復(fù)制到映像中。最后一個(gè)參數(shù)告訴 Docker 您希望將該文件復(fù)制到何處。

將 go.mod and go.sum 文件復(fù)制到您的項(xiàng)目目錄中,由于您使用了 WORKDIR ,該目錄是映像中的當(dāng)前目錄 /app ( ./ )。與一些現(xiàn)代 shell 似乎對(duì)尾部斜杠的使用漠不關(guān)心 ( ),并且可以弄清楚用戶的意思(大多數(shù)時(shí)候 / ),Docker COPY 的命令在解釋尾部斜杠時(shí)非常敏感。

COPY go.mod go.sum ./

現(xiàn)在,您已經(jīng)在要構(gòu)建的 Docker 映像中擁有模塊文件,也可以使用該命令在該命令中運(yùn)行該 RUN 命令 go mod download 。這與在計(jì)算機(jī)上本地運(yùn)行 go 的工作方式完全相同,但這次這些 Go 模塊將安裝到映像中的目錄中。

RUN go mod download

接下來(lái)需要做的是將源代碼復(fù)制到映像中。您將像之前使用模塊文件一樣使用該 COPY 命令。

COPY *.go ./

此 COPY 命令使用通配符將主機(jī)上當(dāng)前目錄(所在的 Dockerfile 目錄)中擴(kuò)展 .go 名的所有文件復(fù)制到映像內(nèi)的當(dāng)前目錄中。

RUN CGO_ENABLED=0 GOOS=linux go build -o /docker-gs-ping

該命令將代碼編譯成一個(gè)二進(jìn)制文件,該二進(jìn)制文件被命名 docker-gs-ping 并位于您正在構(gòu)建的映像的文件系統(tǒng)的根目錄中。您可以將二進(jìn)制文件放入該映像中您想要的任何其他位置。

現(xiàn)在,剩下要做的就是告訴 Docker 在使用鏡像啟動(dòng)容器時(shí)要運(yùn)行什么命令。您可以使用以下 CMD 命令執(zhí)行此操作:

CMD ["/docker-gs-ping"]

以下是完整的 Dockerfile :

# syntax=docker/dockerfile:1
FROM golang:1.19
# Set destination for COPY
WORKDIR /app
# Download Go modules
COPY go.mod go.sum ./
RUN go mod download
# Copy the source code. Note the slash at the end, as explained in
# https://docs.docker.com/engine/reference/builder/#copy
COPY *.go ./
# Build
RUN CGO_ENABLED=0 GOOS=linux go build -o /docker-gs-ping
# Optional:
# To bind to a TCP port, runtime parameters must be supplied to the docker command.
# But we can document in the Dockerfile what ports
# the application is going to listen on by default.
# https://docs.docker.com/engine/reference/builder/#expose
EXPOSE 8080
# Run
CMD ["/docker-gs-ping"]

生成映像

現(xiàn)在,您已經(jīng)創(chuàng)建了 Dockerfile ,讓我們來(lái)生成鏡像。 build context 是位于指定路徑或 URL 中的一組文件。Docker 構(gòu)建過(guò)程可以訪問(wèn)context中的任何文件,在這里我們用 . 來(lái)標(biāo)識(shí)當(dāng)前 context 為同級(jí)目錄。

build 命令可以選擇采用標(biāo)志 --tag 。此標(biāo)志用于使用字符串值標(biāo)記圖像,如果不傳遞 , --tag Docker 將用作 latest 默認(rèn)值

構(gòu)建您的第一個(gè) Docker 映像。

docker build --tag docker-gs-ping .

查看本地鏡像

docker image ls
REPOSITORY                       TAG       IMAGE ID       CREATED         SIZE
docker-gs-ping                   latest    7f153fbcc0a8   2 minutes ago   1.11GB
...

給鏡像打 tag

鏡像名稱由以斜杠分隔的名稱組件組成。名稱組件可以包含小寫(xiě)字母、數(shù)字和分隔符。分隔符定義為句點(diǎn)、一個(gè)或兩個(gè)下劃線或一個(gè)或多個(gè)破折號(hào)。名稱組件不能以分隔符開(kāi)頭或結(jié)尾。

您可以為圖像設(shè)置多個(gè) tag,事實(shí)上,大多數(shù)圖像都有多個(gè)標(biāo)簽。為您構(gòu)建的鏡像打第二個(gè) tag 。使用 docker image tag (或 docker tag 速記)命令為鏡像創(chuàng)建新標(biāo)簽。此命令采用兩個(gè)參數(shù);第一個(gè)參數(shù)是源圖像,第二個(gè)參數(shù)是要?jiǎng)?chuàng)建的新標(biāo)記。以下命令為您構(gòu)建的 docker-gs-ping:latest 創(chuàng)建一個(gè)新 docker-gs-ping:v1.0 標(biāo)簽:

docker image tag docker-gs-ping:latest docker-gs-ping:v1.0

現(xiàn)在再次運(yùn)行查看本地鏡像命令,你會(huì)看到 tag = v1.0 的鏡像。

docker image ls
REPOSITORY                       TAG       IMAGE ID       CREATED         SIZE
docker-gs-ping                   latest    7f153fbcc0a8   6 minutes ago   1.11GB
docker-gs-ping                   v1.0      7f153fbcc0a8   6 minutes ago   1.11GB
...

以上就是構(gòu)建go鏡像實(shí)現(xiàn)過(guò)程全面講解的詳細(xì)內(nèi)容,更多關(guān)于構(gòu)建go鏡像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang進(jìn)行簡(jiǎn)單權(quán)限認(rèn)證的實(shí)現(xiàn)

    golang進(jìn)行簡(jiǎn)單權(quán)限認(rèn)證的實(shí)現(xiàn)

    本文主要介紹了golang簡(jiǎn)單權(quán)限認(rèn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • go語(yǔ)言使用RocketMq的示例代碼

    go語(yǔ)言使用RocketMq的示例代碼

    這篇文章主要介紹了go語(yǔ)言使用RocketMq的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • golang實(shí)現(xiàn)循環(huán)隊(duì)列的示例代碼

    golang實(shí)現(xiàn)循環(huán)隊(duì)列的示例代碼

    循環(huán)隊(duì)列是一種使用固定大小的數(shù)組來(lái)實(shí)現(xiàn)隊(duì)列的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了golang實(shí)現(xiàn)循環(huán)隊(duì)列的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 關(guān)于golang 字符串 int uint int64 uint64 互轉(zhuǎn)問(wèn)題

    關(guān)于golang 字符串 int uint int64 uint64&

    這篇文章主要介紹了golang 字符串 int uint int64 uint64 互轉(zhuǎn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • golang編程開(kāi)發(fā)使用sort排序示例詳解

    golang編程開(kāi)發(fā)使用sort排序示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言編程開(kāi)發(fā)使用sort來(lái)排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • Go?內(nèi)聯(lián)優(yōu)化讓程序員愛(ài)不釋手

    Go?內(nèi)聯(lián)優(yōu)化讓程序員愛(ài)不釋手

    這篇文章主要介紹了Go?內(nèi)聯(lián)優(yōu)化讓程序員愛(ài)不釋手,內(nèi)聯(lián)是在編譯過(guò)程中自動(dòng)進(jìn)行的一類基本優(yōu)化之一,文章圍繞主題展開(kāi)更多詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • 在go文件服務(wù)器加入http.StripPrefix的用途介紹

    在go文件服務(wù)器加入http.StripPrefix的用途介紹

    這篇文章主要介紹了在go文件服務(wù)器加入http.StripPrefix的用途介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang中互斥鎖和讀寫(xiě)互斥鎖原理及示例代碼

    Golang中互斥鎖和讀寫(xiě)互斥鎖原理及示例代碼

    在Golang中,互斥鎖是一種基本的同步原語(yǔ),用于實(shí)現(xiàn)對(duì)共享資源的互斥訪問(wèn),讀寫(xiě)互斥鎖是一種特殊類型的互斥鎖,它允許多個(gè)協(xié)程同時(shí)讀取某個(gè)共享資源,本文將通過(guò)過(guò)示例代碼詳細(xì)介紹Golang中互斥鎖和讀寫(xiě)互斥鎖,需要的朋友可以參考下
    2023-05-05
  • Go語(yǔ)言中最便捷的http請(qǐng)求包resty的使用詳解

    Go語(yǔ)言中最便捷的http請(qǐng)求包resty的使用詳解

    go語(yǔ)言雖然自身就有net/http包,但是說(shuō)實(shí)話用起來(lái)沒(méi)那么好用,resty包是go語(yǔ)言中一個(gè)非常受歡迎的http請(qǐng)求處理包,下面我們一起來(lái)學(xué)習(xí)一下resty的具體使用吧
    2025-03-03
  • 基于Golang實(shí)現(xiàn)Redis分布式鎖解決秒殺問(wèn)題

    基于Golang實(shí)現(xiàn)Redis分布式鎖解決秒殺問(wèn)題

    這篇文章主要給大家介紹了使用Golang實(shí)現(xiàn)Redis分布式鎖解決秒殺問(wèn)題,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

南投县| 察隅县| 清水河县| 普定县| 资兴市| 江华| 光山县| 兴化市| 肃宁县| 江陵县| 黄山市| 淮滨县| 文山县| 嘉祥县| 东平县| 唐海县| 太仆寺旗| 柳江县| 大田县| 巩义市| 阜城县| 怀来县| 报价| 广宗县| 东港市| 道孚县| 肥西县| 太原市| 嘉义县| 南昌县| 文安县| 闽侯县| 台东县| 松江区| 綦江县| 棋牌| 上蔡县| 宜良县| 馆陶县| 富锦市| 潍坊市|