在 GoLang 中使用 Docker Compose 運行 Go 應用程序(golang dockerfile)

點擊上方藍色“Go語言中文網”關注我們,領全套Go資料,每天學習 Go 語言

今天,我們將繼續有關如何使用 Docker 運行調試 Go 應用程序的系列文章。

在本文中,我們將使用 Docker Compose 運行和調試我們的應用程序。對于本文,我們將使用此處的源代碼[1],在開始之前切換到 compose 分支[2]。

使用 Docker Compose 運行 Go 應用程序

讓我們從使用 Docker Compose 運行應用程序開始。

查看我們已經創建的項目,可以在代碼倉庫中找到 docker-compose.yaml 文件:

version: "3.5"services:  web:    container_name: dockerdev    build: ./    ports:      - "8000:8000"    environment:      DD_DB_HOST: db    command: /server    depends_on:      - db  db:    container_name: dockerdev-db    image: postgres:12.2-alpine    ports:      - "5432:5432"    environment:      POSTGRES_USER: goland      POSTGRES_PASSWORD: goland      POSTGRES_DB: goland    volumes:      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

在數據庫部分,我們需要創建一個名為 init.sql 的新文件。該文件的內容用于設置服務運行所需的數據庫。

最后,讓我們在 main.go 文件中運行 Sync packages of <project> 來 quick-fix,以下載 pgx[3] 庫并運行該應用程序。注意:如果你的模塊緩存中還沒有 pgx 的 4.5.0 版本,則需要執行此步驟。

運行基于 Docker Compose 的應用程序類似于其他 Run Configurations。單擊 docker-compose.yaml 中 services 指令旁邊的雙綠色箭頭按鈕。要僅運行一項服務,請點擊要運行的服務類型旁邊的綠色箭頭,例如上面的示例配置中的 web 或 db。

在 GoLang 中使用 Docker Compose 運行 Go 應用程序(golang dockerfile)

配置運行后,在 Docker 節點下的 Services Tool 窗口中會有一個名為 Compose 的新節點。這里會顯示正在運行的每個 Docker Compose 服務套件。

可以瀏覽每個服務定義,并為每個服務顯示所有正在運行的實例。Docker Compose 服務中可用于容器的信息與常規 Docker 容器可使用的信息相同。

注意:如果你要啟動較重的服務(例如數據庫服務器),或者這些服務需要一些初始化時間,則我們的 Go 程序服務需要考慮這些服務的啟動時間。

在我們的示例代碼中,這是使用 getDBConnection 函數處理的,該函數嘗試在放棄之前嘗試幾次以指數退避的方式連接到數據庫。

重啟動 Docker Compose 服務

更改我們的代碼后,我們需要重新啟動服務以重新加載這些更改。目前,使用 IDE 重新啟動它有點復雜,因為這樣做需要你執行以下步驟:

  • 執行 Run | Edit Configurations 并復制一份現有的 Docker Compose 配置;
  • 編輯新創建的配置以添加重新啟動的服務的名稱,并啟用 –build 選項以強制在運行鏡像之前對其進行重建;

完成這些步驟之后,你可以停止現有服務,刪除現有容器,然后啟動新創建的配置。(由于該 GIF 太大,微信無法上傳,可以閱讀原文查看)

在 GoLang 中使用 Docker Compose 運行 Go 應用程序(golang dockerfile)

Pro tip:你可以使用 “Delete” 功能同時停止和刪除服務。

使用 Docker Compose 調試 Go 應用程序

要使用 Docker Compose 調試應用程序,我們需要同時更改 Dockerfile 和 docker-compose.yaml 文件。我們可以切換到代碼庫的 compose-debug 分支[4],這樣更容易理解。

現在,docker-compose.yaml 文件如下所示:

version: "3.5"services:  web:    container_name: dockerdev    build: ./    ports:      - "8000:8000"      - "40000:40000"    environment:      DD_DB_HOST: db    security_opt:      - "seccomp:unconfined"    cap_add:      - SYS_PTRACE    command: /dlv --headless --listen=:40000 --api-version=2 exec /server    depends_on:      - db  db:    container_name: dockerdev-db    image: postgres:12.2-alpine    ports:      - "5432:5432"    environment:      POSTGRES_USER: goland      POSTGRES_PASSWORD: goland      POSTGRES_DB: goland    volumes:      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

注意:這里的重要部分是 security_opt 和 cap_add 屬性,因為它們允許調試器在 Docker 環境中運行。

運行此操作類似于運行常規 Docker Compose 配置。我們可以使用 Go Remote 配置連接到容器,調試器會話將像調試常規配置一樣開始。

在 GoLang 中使用 Docker Compose 運行 Go 應用程序(golang dockerfile)

今天我們的文章到此結束。我們已經討論了如何使用 Docker Compose,以及如何從 GoLand 運行和調試我們的應用程序。

在下一篇文章中,我們將介紹如何在 IDE 中使用 Kubernetes,以及如何使用它運行和調試我們的應用程序。

原文鏈接:https://blog.jetbrains.com/go/2020/05/08/running-go-applications-using-docker-compose-in-goland/

作者:Florin P??an

翻譯:Go 語言中文網 polaris

參考資料

[1]

此處的源代碼: https://github.com/dlsniper/dockerdev/tree/compose

[2]

compose 分支: https://github.com/dlsniper/dockerdev/tree/compose

[3]

pgx: https://github.com/jackc/pgx/

[4]

compose-debug 分支: https://github.com/dlsniper/dockerdev/tree/compose-debug

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2023年4月8日 上午9:23
下一篇 2023年4月8日 上午9:39

相關推薦

欧美破苞合集magnet| 日韩成人免费aa在线看| 亚洲狠狠婷婷综合久久久久| 波多野结衣电影免费在线观看| 国产精品久免费的黄网站| 97在线视频免费播放| 国产精品老女人精品视| 上课公然调教h| 好硬好爽老师再深点| 一出一进一爽一粗一大视频免费的| 天天射天天色天天干| 一个人看的片免费高清大全| 夜夜夜夜猛噜噜噜噜噜试看 | 中文字幕精品一区二区| 巨大黑人极品videos中国| 一级呦女专区毛片| 扒开末成年粉嫩的小缝视频| 久久99国产精品尤物| 好男人资源在线www免费| www.一级片| 国内精品伊人久久久久av影院| 91香蕉在线看私人影院| 国内a级毛片免费···| 91福利视频合集| 国产超碰人人模人人爽人人添| 91在线丨亚洲| 国产成人无码区免费A∨视频网站| 69国产成人精品视频软件| 国产成人高清亚洲一区app| **aaaaa毛片免费同男同女| 国产成人vr精品a视频| 色吊丝最新网站| 国产做床爱无遮挡免费视频| 精品无码av一区二区三区| 免费黄色网址入口| 欧美精品一二三| 亚洲人成伊人成综合网久久久| 欧美乱大交XXXXX疯狂俱乐部| 亚洲一卡一卡二新区无人区| 日韩视频在线观看| 久久亚洲最大成人网4438|