搜尋
首頁運維Docker基於Docker鏡像部署go專案(實例詳解)

這篇文章為大家帶來了基於docker映像部署go專案的相關知識,其中包括編寫GoLang web程式、編譯linux下的程式包的相關問題,希望對大家有幫助。

基於Docker鏡像部署go專案(實例詳解)

依賴知識

  • Go交叉編譯基礎
  • Docker基礎
  • Dockerfile自訂映像基礎
  • docker-compose編排檔案編寫基礎

當然,一點也不會也可以按照這個步驟部署完成,不過可能中間如果出點小問題,會不知道怎麼解決,當然你也可以留言。

我是在mac環境上開發測試的,如果你是在windows上可能有一點出入,但應該不會有啥大問題。

一、依賴環境

  • Docker

二、寫一個GoLang web程式

我這裡就寫一個最簡單的hello world程式吧,監聽埠是80埠。
新建一個main.go文件,內容如下:

package mainimport (
    "fmt"
    "log"
    "net/http")func sayHello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "hello world")}func main() {
    http.HandleFunc("/", sayHello)//注册URI路径与相应的处理函数
    log.Println("【默认项目】服务启动成功 监听端口 80")
    er := http.ListenAndServe("0.0.0.0:80", nil)
    if er != nil {
        log.Fatal("ListenAndServe: ", er)
    }}

三、編譯成linux下的套件

我是在mac上開發的,需要用到go的交叉編譯,如果對交叉編譯不熟悉的,可以查下文檔,或直接複製我下面的指令進行編譯。
我們是要跑在Docker裡面,基礎 golang這個映像跑的,所以需要把他編譯成相容 i386 處理器的程式。

sudo env GOOS=linux GOARCH=386 go build main.go

這個編譯完成後,本地會多出一個 main 程序,暫時不用管它備用就行。

四、使用Dockerfile 客製化我們go程式的映像

#新建一個資料夾,裡面新建一個Dockerfile文件,再在裡面新建appscript兩個檔案。把上一步的main程式放到app資料夾裡面,在script裡面新建一個build.sh腳本文件,檔案內容先不管,等下會說。
具體的文件結構是這樣。

.
├── Dockerfile
├── app
│   └── main
└── script
    └── build.sh

下面就是寫Dockerfile檔案內容了,內容我先上程式碼:

FROM golang
MAINTAINER  青羽
WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/bin/bash", "/go/src/script/build.sh"]

這裡解釋下:

  • FROM 是整合自哪個鏡像,我們是go程式官方提供了一個golang這樣的鏡像,我們可以直接使用。
  • MAINTAINER 是維護這個名字。
  • WORKDIR 工作目錄。
  • COPY 這是一個複製指令,把本地的所有檔案複製到工作目錄下。
  • EXPOSE 這是對方開發的端口,我預設是開放80端口,這裡可根據實際情況修改
  • CMD 執行一個帶參數的指令,我這樣寫,是為了讓鏡像啟動時去執行script/build.sh的腳本,這個腳本裡面是寫的啟動go程式的指令。
    這裡我把內容貼出來:
#!/usr/bin/env bash
cd /go/src/app/ && ./main

就這兩行。

五、編譯我們自己的映像

這屬於Docker的知識了,我把指令貼出來。

docker build -t go-web .
  • 這個指令執行,如果本地沒有golang 這個鏡像的話,他會自己先去官方鏡像庫拉取這個鏡像再編譯,我們靜靜的等他就行。
  • go-web這個參數是你最後編譯後的鏡像名字,可以隨意修改,也可以加上版本號碼例如: go-web:v1

基於Docker鏡像部署go專案(實例詳解)

看到上面這個輸出,就表示編譯成功了,在你的本地鏡像裡面就有了一個名為go-web的鏡像。可以使用docker images 進行查詢:

基於Docker鏡像部署go專案(實例詳解)

#六、編寫docker-compose.yml 檔案

#到這裡屬於我們的最後一步了,如果用我們剛編譯的go-web來運行我們的go程式:

version: '2'networks:
  basic:services:
  world:
    container_name: world
    image: go-web
    ports:
      - "8099:80"
    volumes:
      - ./app/go/world:/go/src/app:rw
    networks:
      - basic

到這裡我們的編排檔案已經寫好了,現在只需要用docker-compose來啟動我們的編排檔案就好,啟動指令如下:

docker-compose -f docker-compose.yml up -d world

如果輸出下面的提示,表示啟動成功了。

Creating world ... done

啟動成功後你可以再用

docker ps

來查看下是否啟動成功了。

現在造訪http://127.0.0.1:8099 就能存取我們的go程式了。

推薦學習:《docker影片教學

以上是基於Docker鏡像部署go專案(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
docker中rm和rmi有什么区别docker中rm和rmi有什么区别Jul 14, 2022 am 11:02 AM

docker中rm和rmi的区别:rm命令用于删除一个或者多个容器,而rmi命令用于删除一个或者多个镜像;rm命令的语法为“docker rm [OPTIONS] CONTAINER [CONTAINER...]”,rmi命令的语法为“docker rmi [OPTIONS] IMAGE [IMAGE...]”。

docker官方镜像有哪些docker官方镜像有哪些May 12, 2022 pm 02:23 PM

docker官方镜像有:1、nginx,一个高性能的HTTP和反向代理服务;2、alpine,一个面向安全应用的轻量级Linux发行版;3、busybox,一个集成了三百多个常用Linux命令和工具的软件;4、ubuntu;5、PHP等等。

docker容器重启后数据会丢吗docker容器重启后数据会丢吗Jun 17, 2022 am 10:41 AM

docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永久存储数据。

docker是免费的吗docker是免费的吗Jul 08, 2022 am 11:21 AM

docker对于小型企业、个人、教育和非商业开源项目来说是免费的;2021年8月31日,docker宣布“Docker Desktop”将转变“Docker Personal”,将只免费提供给小型企业、个人、教育和非商业开源项目使用,对于其他用例则需要付费订阅。

docker能安装oracle吗docker能安装oracle吗Jul 08, 2022 pm 04:07 PM

docker能安装oracle。安装方法:1、拉取Oracle官方镜像,可以利用“docker images”查看镜像;2、启动容器后利用“docker exec -it oracle11g bash”进入容器,并且编辑环境变量;3、利用“sqlplus /nolog”进入oracle命令行即可。

docker存储空间不足怎么办docker存储空间不足怎么办Jul 22, 2022 pm 03:44 PM

解决方法:1、停止docker服务后,利用“rsync -avz /var/lib/docker 大磁盘目录/docker/lib/”将docker迁移到大容量磁盘中;2、编辑“/etc/docker/daemon.json”添加指定参数,将docker的目录迁移绑定;3、重载和重启docker服务即可。

什么是docker最早支持的存储引擎什么是docker最早支持的存储引擎May 12, 2022 pm 03:27 PM

AUFS是docker最早支持的存储引擎。AUFS是一种Union File System,是文件级的存储驱动,是Docker早期用的存储驱动,是Docker18.06版本之前,Ubuntu14.04版本前推荐的,支持xfs、ext4文件。

docker容器管理ui有哪些docker容器管理ui有哪些May 11, 2022 pm 03:39 PM

容器管理ui工具有:1、Portainer,是一个轻量级的基于Web的Docker管理GUI;2、Kitematic,是一个GUI工具,可以更快速、更简单的运行容器;3、LazyDocker,基于终端的一个可视化查询工具;4、DockStation,一款桌面应用程序;5、Docker Desktop,能为Docker设置资源限制,比如内存,CPU,磁盘镜像大小;6、Docui。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具