我想用docker来做一个个人项目,我建立了它,它是用go few services编写的。所以一开始我的“体系结构”是把每个服务拆分到不同的文件夹中每个服务都有自己的main,它启动服务,初始化它所需要的,为它打开一个特定的端口。到目前为止一切都很好。所以我想用docker,所以当我开始阅读到它的时候,我想为每个服务引入docerfile。但由于我使用了组合的go.mod文件,所以无法构建Docker映像。
所以我的问题是如何为这类东西的正确架构,我应该为每个服务引入新的go.mod文件,还是以某种方式使用组合的go.mod,这是整个项目,但以某种方式分割所有的服务,以单独部署有自己的端口和东西.我是新的docker,所以我在寻找建议,这类东西应该如何构建?
我在看一段视频,视频中有人解释说,每个服务都应该有自己的go.mod,但我在看一些开源项目,在我看来,他们只使用一个go.mod文件,而且不知何故,仍然将服务作为不同的服务部署。
2条答案
按热度按时间nhhxz33t1#
这取决于你想要构建和部署它的方式。在我的公司,我们使用一个mono repo,在cmd文件夹中使用相同的go.mod文件来提供不同的服务。
Docker合成文件:
这个项目使用的是https://github.com/cortesi/modd,它是一个灵活的开发工具,可以运行进程并响应文件系统的更改,当使用docker进行本地开发时,您可以受益于热加载,但我们正在为新项目使用https://github.com/cosmtrek/air。
我希望我能帮助你。我会继续寻找这个线程,看看你是否可以解决你的问题。
祝你好运
nszi6y052#
您可以使用单个go.mod文件,并且仍然为docker构建不同的服务可执行文件。如果服务更像单个项目而不是独立的可发布模块,那么单个go.mod就有意义了。
通过指定主文件名而不是.或./...,您将能够为不同的服务构建可执行文件
例如,对于服务目录为
m1的Dockerfile可以如下所示,m2的Dockerfile也是如此。
Dockerfile可以在m1、m2文件夹中,或者您可以使用带有构建参数的公共Dockerfile来指定main.go路径和输出文件名。