欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

關(guān)于 docker

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

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

首先我們?yōu)?Go 應(yīng)用創(chuàng)建一個(gè)目錄,它會(huì)在瀏覽器中顯示 “Hello World”。創(chuàng)建一個(gè) web-app 目錄并使它成為當(dāng)前目錄。進(jìn)入 web-app 應(yīng)用目錄并編輯一個(gè)名為 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)
}

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

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

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

root@demohost:~/web-app# vim.tiny Dockerfile
# 得到最新的 golang docker 鏡像
FROM golang:latest
# 在容器內(nèi)部創(chuàng)建一個(gè)目錄來存儲(chǔ)我們的 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
# 給主機(jī)暴露 8080 端口,這樣外部網(wǎng)絡(luò)可以訪問你的應(yīng)用
EXPOSE 8080
# 告訴 Docker 啟動(dòng)容器運(yùn)行的命令
CMD ["go-wrapper", "run"]

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

使用下面的命令構(gòu)建你的 Go web-app,你會(huì)在成功構(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)在可以運(yùn)行我們的 web-app 了,可以執(zhí)行下面的命令。

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

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

### 列出所有容器
root@demohost:~/ docker ps -a
### 使用 id 啟動(dòng)容器
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 鏡像、停止舊鏡像并運(yùn)行新鏡像,并且每次更改代碼時(shí)都要這樣做。為了使這個(gè)過程自動(dòng)化,我們將使用 docker 卷在主機(jī)和容器之間共享一個(gè)目錄。這意味著你不必為在容器內(nèi)進(jìn)行更改而重新構(gòu)建鏡像。容器如何檢測(cè)你是否對(duì) web 程序的源碼進(jìn)行了更改?答案是有一個(gè)名為 “Gin” 的好工具 https://github.com/codegangsta/gin,它能檢測(cè)是否對(duì)源碼進(jìn)行了任何更改,然后重建鏡像/二進(jìn)制文件并在容器內(nèi)運(yùn)行更新過代碼的進(jìn)程。

要使這個(gè)過程自動(dòng)化,我們將編輯 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)建一個(gè)目錄來存儲(chǔ)我們的 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
# 給主機(jī)暴露 8080 端口,這樣外部網(wǎng)絡(luò)可以訪問你的應(yīng)用
EXPOSE 3030
# 啟動(dòng)容器時(shí)運(yùn)行 Gin
CMD gin run
# 告訴 Docker 啟動(dòng)容器運(yùn)行的命令
CMD ["go-wrapper", "run"]

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

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

我們會(huì)在當(dāng)前 web 程序的根目錄下運(yùn)行 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 程序了。現(xiàn)在如果你改變了任何代碼,會(huì)在瀏覽器刷新后反映在你的瀏覽器中。

總結(jié)

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

相關(guān)文章

  • 使用docker環(huán)境變量動(dòng)態(tài)配置nginx的問題小結(jié)

    使用docker環(huán)境變量動(dòng)態(tài)配置nginx的問題小結(jié)

    這篇文章主要介紹了使用docker環(huán)境變量動(dòng)態(tài)配置nginx,整個(gè)方案,采用的是通過docker run -e xxxx=xxx先往容器注入環(huán)境變量,然后進(jìn)一步通過envsubst指令將環(huán)境變量寫入到具體的文件當(dāng)中,實(shí)現(xiàn)動(dòng)態(tài)配置文件內(nèi)容,需要的朋友可以參考下
    2022-06-06
  • Docker及Docker-Compose的實(shí)例用法

    Docker及Docker-Compose的實(shí)例用法

    在本篇文章里小編給大家整理的是關(guān)于Docker及Docker-Compose的實(shí)例用法,需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • Docker安裝Redis容器的實(shí)現(xiàn)步驟

    Docker安裝Redis容器的實(shí)現(xiàn)步驟

    本文主要介紹了Docker安裝Redis容器的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • docker搭建lnmp環(huán)境的實(shí)現(xiàn)步驟

    docker搭建lnmp環(huán)境的實(shí)現(xiàn)步驟

    DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一鍵安裝程序,本文就來介紹一下docker搭建lnmp環(huán)境的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • Centos下安裝docker教程

    Centos下安裝docker教程

    本文給大家介紹的是在centos下安裝docker的詳細(xì)教程,分為yum安裝和腳本安裝2種方式,有需要的小伙伴可以參考下。
    2016-02-02
  • 關(guān)于docker中?WSL?配置與修改問題

    關(guān)于docker中?WSL?配置與修改問題

    這篇文章主要介紹了docker中?WSL?配置與修改,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Docker安裝配置Oracle詳細(xì)步驟記錄(以作持久化處理)

    Docker安裝配置Oracle詳細(xì)步驟記錄(以作持久化處理)

    docker是一個(gè)用Go語(yǔ)言實(shí)現(xiàn)的開源項(xiàng)目,可以讓我們方便的創(chuàng)建和使用容器,下面這篇文章主要給大家介紹了關(guān)于Docker安裝配置Oracle詳細(xì)步驟的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • docker-compose安裝yml文件配置方式

    docker-compose安裝yml文件配置方式

    這篇文章主要介紹了docker-compose安裝,yml文件配置,離線安裝及在線安裝的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Docker nacos集群部署的實(shí)現(xiàn)

    Docker nacos集群部署的實(shí)現(xiàn)

    本文將深入探討如何使用Docker來部署Nacos集群,從而實(shí)現(xiàn)服務(wù)的快速擴(kuò)展、高可用性和可維護(hù)性,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Docker離線部署geoserver的思路詳解

    Docker離線部署geoserver的思路詳解

    這篇文章主要介紹了Docker離線部署geoserver的思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12

最新評(píng)論