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

詳解如何在 Docker 中設(shè)置 Go 并部署應(yīng)用

 更新時間:2017年03月21日 11:13:31   作者:Dwijadas Dey  
在本教程中,我們將學(xué)習(xí)如何使用 docker 部署 golang web 應(yīng)用程序。 具有一定的參考價值,感興趣的小伙伴們可以參考一下。

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

關(guān)于 docker

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

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

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

root@demohost:~# mkdir web-app
root@demohost:~# cd web-app/
root@demohost:~/web-app# vim.tiny main.go
package main
import (
  "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

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

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

構(gòu)建/運行容器

使用下面的命令構(gòu)建你的 Go web-app,你會在成功構(gòu)建后獲得確認(rèn)。

root@demohost:~/web-app# docker build --rm -t web-app .
Sending build context to Docker daemon 3.584 kB
Step 1 : FROM golang:latest
latest: Pulling from library/golang
386a066cd84a: Already exists
75ea84187083: Pull complete
88b459c9f665: Pull complete
a31e17eb9485: Pull complete
1b272d7ab8a4: Pull complete
eca636a985c1: Pull complete
08158782d330: Pull complete
Digest: sha256:02718aef869a8b00d4a36883c82782b47fc01e774d0ac1afd434934d8ccfee8c
Status: Downloaded newer image for golang:latest
---> 9752d71739d2
Step 2 : RUN mkdir -p /go/src/web-app
---> Running in 9aef92fff9e8
---> 49936ff4f50c
Removing intermediate container 9aef92fff9e8
Step 3 : WORKDIR /go/src/web-app
---> Running in 58440a93534c
---> 0703574296dd
Removing intermediate container 58440a93534c
Step 4 : COPY . /go/src/web-app
---> 82be55bc8e9f
Removing intermediate container cae309ac7757
Step 5 : RUN go-wrapper download
---> Running in 6168e4e96ab1
+ exec go get -v -d
---> 59664b190fee
Removing intermediate container 6168e4e96ab1
Step 6 : RUN go-wrapper install
---> Running in e56f093b6f03
+ exec go install -v
web-app
---> 584cd410fdcd
Removing intermediate container e56f093b6f03
Step 7 : ENV PORT 8080
---> Running in 298e2a415819
---> c87fd2b43977
Removing intermediate container 298e2a415819
Step 8 : EXPOSE 8080
---> Running in 4f639a3790a7
---> 291167229d6f
Removing intermediate container 4f639a3790a7
Step 9 : CMD go-wrapper run
---> Running in 6cb6bc28e406
---> b32ca91bdfe0
Removing intermediate container 6cb6bc28e406
Successfully built b32ca91bdfe0

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

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

進入 http://localhost:8080/World 瀏覽你的 web 應(yīng)用。你已經(jīng)成功容器化了一個可重復(fù)的/確定性的 Go web 應(yīng)用。使用下面的命令來啟動、停止并檢查容器的狀態(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

重新構(gòu)建鏡像

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

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

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

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

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

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

復(fù)制代碼 代碼如下:

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

總結(jié)

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

相關(guān)文章

  • 聊聊Docker不適合跑?MySQL?的N個原因

    聊聊Docker不適合跑?MySQL?的N個原因

    容器是為了解決“在切換運行環(huán)境時,如何保證軟件能夠正常運行”這一問題,這篇文章主要介紹了Docker?為什么不適合跑?MySQL?有N個原因,需要的朋友可以參考下
    2022-12-12
  • Docker中iptables規(guī)則在iptables重啟后丟失的完整過程

    Docker中iptables規(guī)則在iptables重啟后丟失的完整過程

    這篇文章主要給大家介紹了關(guān)于Docker中iptables規(guī)則在iptables重啟后丟失的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Docker具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 使用Docker搭建Java環(huán)境的步驟方法

    使用Docker搭建Java環(huán)境的步驟方法

    本篇文章主要介紹了使用Docker搭建Java環(huán)境的步驟方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Docker daemon 無法啟動: does not match with stored UUID錯誤解決辦法

    Docker daemon 無法啟動: does not match with stored UUID錯誤解決辦法

    這篇文章主要介紹了Docker daemon 無法啟動: does not match with stored UUID錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 詳解如何使用Docker部署一個web項目并打包成鏡像文件

    詳解如何使用Docker部署一個web項目并打包成鏡像文件

    這篇文章主要介紹了詳解如何使用Docker部署一個web項目并打包成鏡像文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Docker移除鏡像幾種不同的方法實戰(zhàn)記錄

    Docker移除鏡像幾種不同的方法實戰(zhàn)記錄

    在Docker實戰(zhàn)中,合理刪除不再需要的鏡像,有助于釋放寶貴的磁盤空間,刪除Docker鏡像可以通過多種方式,包括刪除單個鏡像、強制刪除正在使用的鏡像、刪除未被任何容器引用的所有鏡像以及刪除所有鏡像等,需要的朋友可以參考下
    2024-11-11
  • ubuntu20.04 LTS安裝docker的方法步驟

    ubuntu20.04 LTS安裝docker的方法步驟

    這篇文章主要介紹了ubuntu20.04 LTS安裝docker的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Docker制作鏡像的完整過程

    Docker制作鏡像的完整過程

    本文主要介紹了Docker制作鏡像的完整過程,以制作CentOS鏡像為例,講述對鏡像自定義,打包以及推送的遠程倉庫的過程,感興趣的可以了解一下
    2021-11-11
  • dubbo服務(wù)引用創(chuàng)建Invoker代理對象

    dubbo服務(wù)引用創(chuàng)建Invoker代理對象

    這篇文章主要為大家介紹了dubbo服務(wù)引用創(chuàng)建Invoker代理對象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Windows Docker端口占用錯誤及解決方案總結(jié)

    Windows Docker端口占用錯誤及解決方案總結(jié)

    在 Windows 環(huán)境下使用 Docker 容器時,端口占用錯誤是開發(fā)和運維中常見且棘手的問題,本文將深入剖析該問題的成因,介紹如何通過查看端口分配,合理調(diào)整動態(tài)端口范圍,以及重啟網(wǎng)絡(luò)服務(wù)等實用技巧,有效解決 Windows Docker 端口占用錯誤,需要的朋友可以參考下
    2025-04-04

最新評論

承德市| 策勒县| 伊金霍洛旗| 方山县| 盱眙县| 马尔康县| 建阳市| 子洲县| 阿合奇县| 汾西县| 神池县| 和硕县| 朔州市| 阿尔山市| 临西县| 夹江县| 阳信县| 三都| 陆川县| 阳江市| 岳普湖县| 卓尼县| 宿松县| 辽中县| 荆门市| 平罗县| 灵山县| 新龙县| 安庆市| 定陶县| 眉山市| 山西省| 溆浦县| 蓬溪县| 施秉县| 延庆县| 喀什市| 江川县| 勐海县| 从江县| 巫山县|