亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

詳解如何在 Docker 中設置 Go 并部署應用

2024-09-01 13:51:08
字體:
來源:轉載
供稿:網友

嗨,在本教程中,我們將學習如何使用 docker 部署 golang web 應用程序。 你可能已經知道,由于 golang 的高性能和可靠性,docker 是完全是用 golang 寫的。在我們詳細介紹之前,請確保你已經安裝了 docker 以及 golang 并對它們有基本了解。

關于 docker

Docker 是一個開源程序,它可以將應用及其完整的依賴包捆綁到一起,并打包為容器,與宿主機共享相同的 Linux 內核。另一方面,像 VMware 這樣的基于 hypervisor 的虛擬化操作系統容器提供了高級別的隔離和安全性,這是由于客戶機和主機之間的通信是通過 hypervisor 來實現的,它們不共享內核空間。但是硬件仿真也導致了性能的開銷,所以容器虛擬化誕生了,以提供一個輕量級的虛擬環境,它將一組進程和資源與主機以及其它容器分組及隔離,因此,容器內部的進程無法看到容器外部的進程或資源。

用 Go 語言創建一個 “Hello World” web 應用

首先我們為 Go 應用創建一個目錄,它會在瀏覽器中顯示 “Hello World”。創建一個 web-app 目錄并使它成為當前目錄。進入 web-app 應用目錄并編輯一個名為 main.go 的文件。

root@demohost:~# mkdir web-approot@demohost:~# cd web-app/root@demohost:~/web-app# vim.tiny main.gopackage mainimport (  "fmt"  "net/http")func handler(w http.ResponseWriter, r *http.Request) {  fmt.Fprintf(w, "Hello %s", r.URL.Path[1:])}func main() {  http.HandleFunc("/World", handler)  http.ListenAndServe(":8080", nil)}

使用下面的命令運行上面的 “Hello World” Go 程序。在瀏覽器中輸入 http://127.0.0.1:8080/World 測試,你會在瀏覽器中看到 “Hello World”。

root@demohost:~/web-app# PORT=8080 go run main.go

下一步是將上面的應用在 docker 中容器化。因此我們會創建一個 dockerfile 文件,它會告訴 docker 如何容器化我們的 web 應用。

root@demohost:~/web-app# vim.tiny Dockerfile# 得到最新的 golang docker 鏡像FROM golang:latest# 在容器內部創建一個目錄來存儲我們的 web 應用,接著使它成為工作目錄。RUN mkdir -p /go/src/web-appWORKDIR /go/src/web-app# 復制 web-app 目錄到容器中COPY . /go/src/web-app# 下載并安裝第三方依賴到容器中RUN go-wrapper downloadRUN go-wrapper install# 設置 PORT 環境變量ENV PORT 8080# 給主機暴露 8080 端口,這樣外部網絡可以訪問你的應用EXPOSE 8080# 告訴 Docker 啟動容器運行的命令CMD ["go-wrapper", "run"]

構建/運行容器

使用下面的命令構建你的 Go web-app,你會在成功構建后獲得確認。

root@demohost:~/web-app# docker build --rm -t web-app .Sending build context to Docker daemon 3.584 kBStep 1 : FROM golang:latestlatest: Pulling from library/golang386a066cd84a: Already exists75ea84187083: Pull complete88b459c9f665: Pull completea31e17eb9485: Pull complete1b272d7ab8a4: Pull completeeca636a985c1: Pull complete08158782d330: Pull completeDigest: sha256:02718aef869a8b00d4a36883c82782b47fc01e774d0ac1afd434934d8ccfee8cStatus: Downloaded newer image for golang:latest---> 9752d71739d2Step 2 : RUN mkdir -p /go/src/web-app---> Running in 9aef92fff9e8---> 49936ff4f50cRemoving intermediate container 9aef92fff9e8Step 3 : WORKDIR /go/src/web-app---> Running in 58440a93534c---> 0703574296ddRemoving intermediate container 58440a93534cStep 4 : COPY . /go/src/web-app---> 82be55bc8e9fRemoving intermediate container cae309ac7757Step 5 : RUN go-wrapper download---> Running in 6168e4e96ab1+ exec go get -v -d---> 59664b190feeRemoving intermediate container 6168e4e96ab1Step 6 : RUN go-wrapper install---> Running in e56f093b6f03+ exec go install -vweb-app---> 584cd410fdcdRemoving intermediate container e56f093b6f03Step 7 : ENV PORT 8080---> Running in 298e2a415819---> c87fd2b43977Removing intermediate container 298e2a415819Step 8 : EXPOSE 8080---> Running in 4f639a3790a7---> 291167229d6fRemoving intermediate container 4f639a3790a7Step 9 : CMD go-wrapper run---> Running in 6cb6bc28e406---> b32ca91bdfe0Removing intermediate container 6cb6bc28e406Successfully built b32ca91bdfe0

現在可以運行我們的 web-app 了,可以執行下面的命令。

root@demohost:~/web-app# docker run -p 8080:8080 --name="test" -d web-app7644606b9af28a3ef1befd926f216f3058f500ffad44522c1d4756c576cfa85b

進入 http://localhost:8080/World 瀏覽你的 web 應用。你已經成功容器化了一個可重復的/確定性的 Go web 應用。使用下面的命令來啟動、停止并檢查容器的狀態。

### 列出所有容器root@demohost:~/ docker ps -a### 使用 id 啟動容器root@demohost:~/ docker start CONTAINER_ID_OF_WEB_APP### 使用 id 停止容器root@demohost:~/ docker stop CONTAINER_ID_OF_WEB_APP

重新構建鏡像

假設你正在開發 web 應用程序并在更改代碼?,F在要在更新代碼后查看結果,你需要重新生成 docker 鏡像、停止舊鏡像并運行新鏡像,并且每次更改代碼時都要這樣做。為了使這個過程自動化,我們將使用 docker 卷在主機和容器之間共享一個目錄。這意味著你不必為在容器內進行更改而重新構建鏡像。容器如何檢測你是否對 web 程序的源碼進行了更改?答案是有一個名為 “Gin” 的好工具 https://github.com/codegangsta/gin,它能檢測是否對源碼進行了任何更改,然后重建鏡像/二進制文件并在容器內運行更新過代碼的進程。

要使這個過程自動化,我們將編輯 Dockerfile 并安裝 Gin 將其作為入口命令來執行。我們將開放 3030 端口(Gin 代理),而不是 8080。 Gin 代理將轉發流量到 web 程序的 8080 端口。

root@demohost:~/web-app# vim.tiny Dockerfile# 得到最新的 golang docker 鏡像FROM golang:latest# 在容器內部創建一個目錄來存儲我們的 web 應用,接著使它稱為工作目錄。RUN mkdir -p /go/src/web-appWORKDIR /go/src/web-app# 復制 web 程序到容器中COPY . /go/src/web-app# 下載并安裝第三方依賴到容器中RUN go get github.com/codegangsta/ginRUN go-wrapper downloadRUN go-wrapper install# 設置 PORT 環境變量ENV PORT 8080# 給主機暴露 8080 端口,這樣外部網絡可以訪問你的應用EXPOSE 3030# 啟動容器時運行 GinCMD gin run# 告訴 Docker 啟動容器運行的命令CMD ["go-wrapper", "run"]

現在構建鏡像并啟動容器:

root@demohost:~/web-app# docker build --rm -t web-app .

我們會在當前 web 程序的根目錄下運行 docker,并通過暴露的 3030 端口鏈接 CWD (當前工作目錄)到容器中的應用目錄下。

 

復制代碼 代碼如下:

root@demohost:~/web-app# docker run -p 3030:3030 -v `pwd`:/go/src/web-app --name="test" -d web-app

 

打開 http://localhost:3030/World, 你就能看到你的 web 程序了。現在如果你改變了任何代碼,會在瀏覽器刷新后反映在你的瀏覽器中。

總結

就是這樣,我們的 Go web 應用已經運行在 Ubuntu 16.04 Docker 容器中運行了!你可以通過使用 Go 框架來快速開發 API、網絡應用和后端服務,從而擴展當前的網絡應用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一二三在线| 亚洲国产精品免费| 2019亚洲男人天堂| 亚洲图片欧美午夜| 欧美野外猛男的大粗鳮| 久久人91精品久久久久久不卡| 国产剧情日韩欧美| 成人精品一区二区三区电影免费| 日韩视频第一页| 欧美精品一本久久男人的天堂| 4438全国亚洲精品在线观看视频| 亚洲国产欧美在线成人app| 国产精品爱久久久久久久| 色综合久久中文字幕综合网小说| 国产99视频精品免视看7| 热久久免费国产视频| 成人a视频在线观看| 成人国产在线视频| 欧美成人免费全部观看天天性色| 亚洲国产精品中文| 91精品在线观| 97国产精品视频人人做人人爱| 亚洲精品视频二区| 日韩在线一区二区三区免费视频| 日韩**中文字幕毛片| 亚洲欧美日韩区| 国产一区二区三区在线观看视频| 中文国产亚洲喷潮| 欧美第一黄网免费网站| 国产第一区电影| 日韩精品中文字幕久久臀| 亚洲一级免费视频| 亚洲精品丝袜日韩| 高清一区二区三区日本久| 国产亚洲欧美日韩精品| 精品国产依人香蕉在线精品| 中文在线不卡视频| 欧美午夜精品在线| 麻豆精品精华液| 91高清免费视频| 亚洲国产精品美女| 国产一区二区三区在线播放免费观看| 亚洲欧美国产日韩天堂区| 97超级碰碰碰久久久| 欧美极品xxxx| 欧美日韩国产精品专区| 高清日韩电视剧大全免费播放在线观看| 在线播放日韩专区| 国产综合色香蕉精品| 国产精品久久久一区| 91在线高清视频| 久久久亚洲国产天美传媒修理工| 97精品国产97久久久久久| 欧美日韩午夜激情| 69av成年福利视频| 久久成年人视频| 国产精品国产三级国产aⅴ9色| 日本在线观看天堂男亚洲| 欧美精品videosex牲欧美| 国产精品久久电影观看| 国产一区二区三区在线看| 精品香蕉一区二区三区| 亚洲人成在线观看| 亚洲天堂2020| 成人字幕网zmw| 日本欧美中文字幕| 92看片淫黄大片欧美看国产片| 国产午夜精品全部视频在线播放| 91沈先生在线观看| 美女少妇精品视频| 国产99久久精品一区二区| 欧美午夜丰满在线18影院| 亚州国产精品久久久| 欧美福利小视频| 精品动漫一区二区三区| 日韩免费在线视频| 一区二区欧美激情| 亚洲日韩中文字幕在线播放| 久久人人爽人人爽爽久久| 日韩免费精品视频| 亚洲国产一区二区三区在线观看| 欧美激情精品久久久久久久变态| 日韩人体视频一二区| 国产亚洲在线播放| 亚洲在线免费视频| 欧美激情精品久久久久久黑人| 久久激情视频免费观看| 欧美性猛交99久久久久99按摩| 中文字幕亚洲一区二区三区五十路| 亚洲免费av电影| 国产精品99久久久久久www| 久久精彩免费视频| 久久国产精品影视| 久久亚洲精品中文字幕冲田杏梨| 久久久999国产| 亚洲午夜未删减在线观看| 精品偷拍一区二区三区在线看| 97精品伊人久久久大香线蕉| 国模叶桐国产精品一区| 欧美专区国产专区| 色哟哟入口国产精品| 91香蕉嫩草影院入口| 国产精品黄页免费高清在线观看| 国产欧美va欧美va香蕉在| 欧美日韩电影在线观看| 中文字幕精品网| 中文字幕在线观看日韩| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品一区二区三区毛片淫片| 秋霞av国产精品一区| 日韩av电影院| 久久精品国产久精国产一老狼| 国产亚洲a∨片在线观看| 日本一欧美一欧美一亚洲视频| 日本亚洲精品在线观看| 久久久精品国产网站| 国产亚洲精品久久久久动| 中文日韩在线观看| 91chinesevideo永久地址| 精品人伦一区二区三区蜜桃网站| 久久久久一本一区二区青青蜜月| 欧美视频在线免费看| 国产ts一区二区| 国产精品久久999| 一区二区成人av| 亚洲一区二区三区香蕉| 久久精品视频一| 日韩日本欧美亚洲| 久久久久亚洲精品国产| www国产精品com| 亚洲三级黄色在线观看| 91国偷自产一区二区三区的观看方式| 久久频这里精品99香蕉| 亚洲另类欧美自拍| 中文字幕亚洲一区二区三区五十路| 91久久精品国产91性色| 中文日韩在线观看| 国产精品免费视频久久久| 国产精品久久久久久久app| 日韩美女免费视频| 亚洲2020天天堂在线观看| 欧美国产日韩免费| 黑人与娇小精品av专区| 欧美性高潮在线| 俺去亚洲欧洲欧美日韩| 久久久精品久久久久| 色哟哟亚洲精品一区二区| 狠狠综合久久av一区二区小说| 成人网址在线观看| 久久精品一本久久99精品| 庆余年2免费日韩剧观看大牛| 精品高清一区二区三区| 中文字幕日韩av综合精品| 亚洲人成网站免费播放| 国产精品va在线播放我和闺蜜| 久久国产天堂福利天堂| 亚洲精品国产精品国自产观看浪潮| 精品久久久中文| 国产欧美日韩免费| 性亚洲最疯狂xxxx高清| 精品性高朝久久久久久久| 欧美日韩人人澡狠狠躁视频| 国产一区二区av| 久久久免费高清电视剧观看|