FROM golang:latest as build
COPY . /data/
WORKDIR /data/
RUN go build -o dist/main cmd/main.go
FROM scratch
WORKDIR /app
EXPOSE 80
CMD ["./main"]
这样 docker-compose 编辑 Dockerfile 的话会报找不到 library 的引用,因为没有 copy 进来。但是好像 Dockerfile 的 copy 不能 copy 上级目录的东西。
所以现在的问题是如何能够优雅地编译微服务?
1
xuanbg 2021-05-23 18:41:59 +08:00
COPY ../library/*
|
3
ttyn 2021-05-23 18:52:14 +08:00 2
将 docker 编译上下文设置为根目录,指定 Dockerfile 路径就可以了
# 在 project 根目录运行编译命令 docker build -t myname:mytag -f ./app1/Dockerfile . |
4
MengQuadra 2021-05-23 22:41:14 +08:00
我选择 Dockerfile 全部放上级目录
Dockerfile.app1 Dockerfile.app2 疑似能少打几个字符.... |
5
wunonglin OP @MengQuadra #4 其实 app 的数量和层级不定的。假设有 100 个 app,全放在根目录,想想都感人
|
6
MengQuadra 2021-05-24 00:18:04 +08:00
@wunonglin 太多还是分开吧...少的我感觉更直观, 多起来真是脑壳疼
|
7
hallDrawnel 2021-05-24 01:14:55 +08:00
每个会被独立编译的服务我们都有自己的 go.mod 来解决依赖问题。这样做好处很多,具体见 https://medium.com/@ckeyes88/go-modules-in-real-life-87a21fb4d8aa
|
8
waising 2021-05-24 09:47:55 +08:00
我是把所有的自定义依赖包 功能包都弄成私有 git 仓库 mod 方式引进不同的项目里
|
9
cvl 2021-05-24 11:57:20 +08:00
-v
|
10
actar 2021-05-24 16:08:30 +08:00
go mod vendor 生成 vendor 目录,打包时带上 -mod=vendor 选项
|
11
actar 2021-05-24 16:12:25 +08:00
我看了一下,需要每个目录里面都有 go.mod 。和我想的不太一样
|
12
joesonw 2021-05-24 18:50:20 +08:00
monorepo 最优雅的解决方案就是上 bazel 了.
|