在 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

相关推荐

  • 教研项目是什么意思(教研科研项目)

    教研科研项目教研科研项目的培养,是开展校领导与教学领导的大阵中势。每一个学校都是在不断地走向中的、阖家的舞台上,会有很多兴趣活动和特长为切入点。在这里,我就会给学生们分享6个心理健…

    科研百科 2024年7月30日
    4
  • 教育系统信息化平台进行相应的等保测评及改造

    随着国家《教育信息化中长期发展规划》的不断推进,教育系统信息化平台在教育领域中发挥着越来越重要的作用。然而,随着等保测评的来临,教育系统信息化平台也需要进行相应的改造,以满足等保测…

    科研百科 2024年10月10日
    3
  • 科研费最多科研项目

    科研费最多科研项目:探索宇宙深处 近年来,随着科技的不断进步,人们对宇宙的探索也越来越深入。在人类对宇宙的探索中,科研费是非常重要的一部分。而在最近,一项科研费最多的科研项目也在顺…

    科研百科 2025年2月27日
    2
  • 以新时代党建创新引领国有企业高质量发展的实践与思考(新时代国有企业党建创新形态研究)

    2018年7月,习近平总书记在全国组织工作会议上强调,“提高党的建设质量,是党的十九大总结实践经验、顺应新时代党的建设总要求提出的重大课题。”国有企业要深入贯彻新时代党的建设要求和…

    科研百科 2024年7月3日
    57
  • 危大工程管理系统

    危大工程管理系统 随着现代建筑行业的发展,危大工程管理系统成为了一个必要的工具。这种系统可以帮助建筑公司更好地管理他们的工程,提高效率和质量。本文将介绍危大工程管理系统的一些特点和…

    科研百科 2024年10月9日
    13
  • 农业大数据科研项目名称

    农业大数据科研项目名称: 随着信息化的深入发展,农业领域也在逐渐引入大数据技术。农业大数据科研项目旨在利用大数据技术对农业生产进行深入了解,提高农业生产效率和质量。 农业大数据科研…

    科研百科 2025年5月2日
    4
  • 星璇项目管理系统

    星璇项目管理系统 星璇项目管理系统是一种高效、灵活、可靠的项目管理工具,能够帮助企业提高项目管理效率,降低项目风险,提高项目交付质量。 星璇项目管理系统采用了最先进的项目管理技术,…

    科研百科 2025年6月18日
    0
  • 河北工业大学教授

    作为一名河北工业大学的教授,我深知教育对于国家和社会发展的重要性。在当今全球化和信息化的时代,教育必须适应时代的需求,不断提高自身的质量和水平。 作为一名教授,我一直致力于研究和探…

    科研百科 2024年10月20日
    3
  • 科研项目开题答辩开场

    科研项目开题答辩开场 随着科技的不断进步,科研项目已经成为现代社会的重要组成部分。在科研项目的发展过程中,开题答辩是一项非常重要的环节。它标志着科研项目的开始,也标志着科学家们的开…

    科研百科 2025年3月1日
    1
  • 如何写科研项目宣传报道

    如何写科研项目宣传报道 科研项目宣传报道是展示科研项目成果和进展的重要方式,能够让读者更好地了解项目,并对项目产生兴趣。以下是一些撰写科研项目宣传报道的建议。 1. 突出项目亮点 …

    科研百科 2025年5月7日
    3