文章目录

在项目开发中,可能我们需要开发多个服务程序协同工作,比如游戏中的网关服,登录服,世界服,数据库服等等。在容器技术出来以前可能需要写一个脚本程序来启动一组服务。随着容器的出现,特别是容器编排的技术的出现,我们可以直接使用容器编排来进行部署。 笔者以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    <<```