使用容器编排对go项目进行部署、调试

本文介绍了如何使用Dockerfile和docker-compose文件部署Go项目,详细阐述了环境配置、部署步骤(包括Dockerfile编写、编排文件设置、Goland部署配置)以及调试方法(如创建dbg.Dockerfile、debug-compose.yml和远程调试配置)。重点讨论了容器编排和Goland在调试Go服务中的应用。
摘要由CSDN通过智能技术生成


在项目开发中,可能我们需要开发多个服务程序协同工作,比如游戏中的网关服,登录服,世界服,数据库服等等。在容器技术出来以前可能需要写一个脚本程序来启动一组服务。随着容器的出现,特别是容器编排的技术的出现,我们可以直接使用容器编排来进行部署。
笔者以Go项目为例,介绍如何在Goland中对项目各个服务进行容器的编排部署和调试。

假定项目中有GTS(网关服)、LS(登录服)、WS(世界服)以及DBS(数据库服)几个服务。

一、环境配置

首先需要安装好Goland、Go、Linux(或者WSL2)等等这些环境。

二、部署

1、编写Dockerfile

一般情况下,我们部署与编译分开进行容器的构建,这样最终部署的镜像就会比较小,不带编译环境。所以编写的Dockerfile也是分段进行容器的构建,编译时使用的golang:1.16镜像,最终的镜像使用的是ubuntu:20.04。

FROM golang:1.16 as build-env

COPY . /build
WORKDIR /build

ENV TZ=Asia/Shanghai
RUN go build -o /app

FROM ubuntu:20.04

WORKDIR /
COPY --from=build-env /app /
COPY --from=build-env /usr/share/zoneinfo /usr/share/zoneinfo
ENV TZ=Asia/Shanghai

ENTRYPOINT ["/app", "-console=true"]

如果项目的可执行程序是一个,不同的程序使用的不同的参数来启动,则在Dockerfile中应该使用ENTRYPOINT来决定启动命令行,在编排的时候则使用CMD来设置启动参数,这样CMD设置的参数会自动作为ENTRYPOINT命令的参数,详细的可以参考Dockerfile文档

为了让系统时间为本地时间,需要使用ENV来设置TZ为本地时区

  • golang容器带有时区文件,只需要设置时区即可,这样如果想使用cgo来设置编译时间,参见:Go项目中添加生成时间与版本信息,则可以得到本地时间,而不是UTC时间。
  • ubuntu容器默认是没有时区文件,所以需要从golang容器中复制后再设置时区。

2、编写容器编排文件

由于所有服务都是使用的同样的可执行文件,所以只需要编译一次即可,其它的都是使用不同的参数来启动不同的服务。

为了在编排时只编译一次,其它的都重复使用编译的结果,需要用到扩展字段(Extension fields),扩展字段是在3.4版本添加的,所以编排文件的版本号必须在3.4版本及以上。

为了让各服务都能正常相互连接,需要组建自己的局域网络并设置连接(links)

我们假设容器编排文件名为:compose.yml。
内容如下:

version: "3.9"
x-base:
  &build
  image: demo
  build:
    context: .
    dockerfile: Dockerfile

services:
  dbs:
    <<: *build
    command: [ "-dbs" ]
    networks:
      network:
        ipv4_address: 18.1.1.10

  ls:
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值