1
0
Files
build.ems/pkg/docker/Dockerfile.ubuntu22.04
2025-07-16 15:46:20 +08:00

86 lines
2.6 KiB
Docker

## 第一阶段 ====> Nodejs打包编译输出前端资源
FROM node:20-alpine AS build-node
# 系统文件
COPY ./linux /linux
# 后端程序
COPY ./omc_api /api
# 前端程序
COPY ./omc_web /web
RUN npm config set registry https://registry.npmmirror.com
RUN cd /web && npm install && npm run build
## 第二阶段 ====> Go打包编译输出后端程序
FROM ubuntu:22.04 AS build-golang
ARG TARGETARCH
ARG VERSION
# 从上个阶段复制文件
COPY --from=build-node /web/dist /web
COPY --from=build-node /api /api
COPY --from=build-node /linux /linux
# 安装 Go 和其他依赖
RUN apt-get update && \
apt-get install -y build-essential libpcap-dev curl \
&& curl -OL https://dl.google.com/go/go1.24.2.linux-$TARGETARCH.tar.gz \
&& tar -C /usr/local -xzf go1.24.2.linux-$TARGETARCH.tar.gz \
&& rm go1.24.2.linux-$TARGETARCH.tar.gz \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 设置变量
ENV PATH="/usr/local/go/bin:${PATH}"
ENV OS_ARCH="${TARGETARCH:-amd64}"
ENV CGO_ENABLED=1
ENV GOOS=linux
ENV GOPROXY=https://goproxy.cn,direct
RUN cd /api && go mod download
RUN cd /api && go build -o omc -v -ldflags "-s -w \
-X 'be.ems/src/framework/config.Version=$VERSION' \
-X 'be.ems/src/framework/config.BuildTime=$(date)' \
-X 'be.ems/src/framework/config.GoVer=$(go version)'"
## 第三阶段 ====> 构建前后端融合镜像
FROM ubuntu:22.04
# 从上个阶段复制文件
COPY --from=build-golang /linux/usr/local/etc/omc /usr/local/etc/omc
COPY --from=build-golang /linux/usr/local/omc /usr/local/omc
COPY --from=build-golang /api/omc /usr/local/bin/omc
COPY --from=build-golang /web /usr/local/etc/omc/web
# 更新apt并安装必要工具
RUN apt-get update && apt-get install -y libpcap-dev nginx
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
RUN apt-get clean && rm -rf /var/lib/apt/lists /var/cache/apt/archives
# 设置时区和语言环境
ENV LANG="en_US.UTF-8"
ENV TZ="Asia/Shanghai"
WORKDIR /usr/local/etc/omc
RUN chmod +x /usr/local/etc/omc/script/*.sh
RUN /usr/local/etc/omc/script/postunpack.sh
EXPOSE 80 443 33030 33443 33033 33034 33060
CMD [ "/usr/local/etc/omc/script/entrypoint.sh" ]
# build 707MB
# docker docker build --platform linux/amd64 --build-arg TARGETARCH=amd64 --build-arg VERSION=2.2505.2 -t omc:2.2505.2-ubuntu22.04-amd64 .
# docker run --network omcnet -it omc:2.2505.2-ubuntu22.04-amd64 /bin/bash
# docker run --privileged=true --restart=always -m 512M \
# -e TZ=Asia/Shanghai \
# -e M_PARAM=lite \
# -p 80:80 \
# -p 443:443 \
# --network omcnet \
# --name omc \
# -d omc:2.2505.2-ubuntu22.04-amd64