国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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

2024-09-01 13:51:08
字體:
來源:轉載
供稿:網(wǎng)友

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

關于 docker

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

用 Go 語言創(chuàng)建一個 “Hello World” web 應用

首先我們?yōu)?Go 應用創(chuàng)建一個目錄,它會在瀏覽器中顯示 “Hello World”。創(chuàng)建一個 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 中容器化。因此我們會創(chuàng)建一個 dockerfile 文件,它會告訴 docker 如何容器化我們的 web 應用。

root@demohost:~/web-app# vim.tiny Dockerfile# 得到最新的 golang docker 鏡像FROM golang:latest# 在容器內部創(chuàng)建一個目錄來存儲我們的 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 環(huán)境變量ENV PORT 8080# 給主機暴露 8080 端口,這樣外部網(wǎng)絡可以訪問你的應用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

現(xiàn)在可以運行我們的 web-app 了,可以執(zhí)行下面的命令。

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

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

### 列出所有容器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

重新構建鏡像

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

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

root@demohost:~/web-app# vim.tiny Dockerfile# 得到最新的 golang docker 鏡像FROM golang:latest# 在容器內部創(chuàng)建一個目錄來存儲我們的 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 環(huán)境變量ENV PORT 8080# 給主機暴露 8080 端口,這樣外部網(wǎng)絡可以訪問你的應用EXPOSE 3030# 啟動容器時運行 GinCMD gin run# 告訴 Docker 啟動容器運行的命令CMD ["go-wrapper", "run"]

現(xiàn)在構建鏡像并啟動容器:

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 程序了。現(xiàn)在如果你改變了任何代碼,會在瀏覽器刷新后反映在你的瀏覽器中。

總結

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 长顺县| 锡林浩特市| 大足县| 郧西县| 醴陵市| 普兰店市| 肇源县| 六枝特区| 汾西县| 阿合奇县| 温州市| 平利县| 南投县| 综艺| 庆阳市| 卢湾区| 定结县| 鹰潭市| 瑞安市| 沽源县| 长治市| 阳朔县| 津南区| 四川省| 威宁| 仙居县| 邢台县| 象山县| 富锦市| 诏安县| 罗山县| 虞城县| 邵阳市| 新兴县| 三台县| 平舆县| 山阳县| 嘉义市| 昌乐县| 华蓥市| 剑川县|