使用容器编排对go项目进行部署、调试
文章目录
在项目开发中,可能我们需要开发多个服务程序协同工作,比如游戏中的网关服,登录服,世界服,数据库服等等。在容器技术出来以前可能需要写一个脚本程序来启动一组服务。随着容器的出现,特别是容器编排的技术的出现,我们可以直接使用容器编排来进行部署。 笔者以Go项目为例,介绍如何在Goland中对项目各个服务进行容器的编排部署和调试。
假定项目中有GTS(网关服)、LS(登录服)、WS(世界服)以及DBS(数据库服)几个服务。
一、环境配置
首先需要安装好Goland、Go、Linux(或者WSL2)等等这些环境。
二、部署
1、编写Dockerfile
一般情况下,我们部署与编译分开进行容器的构建,这样最终部署的镜像就会比较小,不带编译环境。所以编写的Dockerfile也是分段进行容器的构建,编译时使用的golang:1.16镜像,最终的镜像使用的是ubuntu:20.04。
1FROM golang:1.16 as build-env
2
3COPY . /build
4WORKDIR /build
5
6RUN go build -o /app
7
8FROM ubuntu:20.04
9
10WORKDIR /
11COPY --from=build-env /app /
12
13ENTRYPOINT ["/app", "-console=true"]
如果项目的可执行程序是一个,不同的程序使用的不同的参数来启动,则在Dockerfile中应该使用ENTRYPOINT来决定启动命令行,在编排的时候则使用CMD来设置启动参数,这样CMD设置的参数会自动作为ENTRYPOINT命令的参数,详细的可以参考 Dockerfile文档。
2、编写容器编排文件
由于所有服务都是使用的同样的可执行文件,所以只需要编译一次即可,其它的都是使用不同的参数来启动不同的服务。
为了在编排时只编译一次,其它的都重复使用编译的结果,需要用到扩展字段( Extension fields),扩展字段是在3.4版本添加的,所以编排文件的版本号必须在3.4版本及以上。
为了让各服务都能正常相互连接,需要组建自己的局域网络并设置连接(links)
我们假设容器编排文件名为:compose.yml。 内容如下:
1version: "3.9"
2x-base:
3 &build
4 image: demo
5 build:
6 context: .
7 dockerfile: Dockerfile
8
9services:
10 dbs:
11 <<: *build
12 command: [ "-dbs" ]
13 networks:
14 network:
15 ipv4_address: 18.1.1.10
16
17 ls:
18 <<```
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2022/2022-01-11-使用容器编排对go项目进行部署调试/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。