我知道最好的做法是始终将前端和后端代码分开。我有一个 Vue js 应用程序和一个 Golang 服务器来执行一些业务逻辑,我需要它们成为一个可以从单个容器运行的单元。有什么建议吗?
非常感谢
使用多阶段 Dockerfile确保您只复制所需的资产。使用scratch图像还可以显着减少图像占用空间
例如,以下多阶段构建将 VueJS 构建到dist目录和单个 Go 二进制文件中,并将它们复制到最小scratch图像:
# go build
FROM golang:1.16.3 AS go-build
WORKDIR /
COPY backend backend
RUN CGO_ENABLED=0 go build
# node build
FROM node:15.13.0 AS node-build
WORKDIR /
COPY frontend frontend
RUN \
npm i && \
npm run build
#
# final stage:
#
FROM scratch
COPY --from=go-build \
/backend/rest-server \
/app/rest-server
COPY --from=node-build \
/frontend/dist \
/app/dist/
CMD ["/app/rest-server"]
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,您的 REST 服务不仅会为您的后端 API 提供服务,还会为目录中构建的静态 VueJS 前端资源提供服务/app/dist:
h.Handle(
"/",
http.StripPrefix(
"/",
http.FileServer(
http.Dir(conf.StaticDir), // e.g. VueJS's "/app/dist"
),
),
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5607 次 |
| 最近记录: |