Cleaner Docker file with much lighter base image (#387)

* updated dockerfile

* updated dockerfile

* Update Dockerfile

added platform

* added iran.dat

* added iran.dat

---------

Co-authored-by: Hossein Abaiyani <hossein.abaiyani@arvancloud.com>
This commit is contained in:
Hossein Abaiyani 2023-05-11 13:08:44 +03:30 committed by GitHub
parent 46ef8c503e
commit ad1aa5b2f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 62 deletions

22
DockerInit.sh Executable file
View file

@ -0,0 +1,22 @@
#!/bin/sh
if [ $1 == "amd64" ]; then
ARCH="64";
FNAME="amd64";
elif [ $1 == "arm64" ]; then
ARCH="arm64-v8a"
FNAME="arm64";
else
ARCH="64";
FNAME="amd64";
fi
mkdir -p build/bin
cd build/bin
wget "https://github.com/mhsanaei/xray-core/releases/latest/download/Xray-linux-${ARCH}.zip"
unzip "Xray-linux-${ARCH}.zip"
rm -f "Xray-linux-${ARCH}.zip" geoip.dat geosite.dat iran.dat
mv xray "xray-linux-${FNAME}"
wget "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
wget "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
wget "https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat"
cd ../../

View file

@ -1,69 +1,20 @@
# Use the official Golang image as the base image
FROM --platform=$BUILDPLATFORM golang:1.20 as builder
ARG TARGETOS TARGETARCH
# Set up the working directory
#Build latest x-ui from source
FROM --platform=$BUILDPLATFORM golang:1.20.4-alpine AS builder
WORKDIR /app
# Copy the Go modules and download the dependencies
COPY go.mod go.sum ./
RUN go mod download
# Copy the source code
ARG TARGETARCH
RUN apk --no-cache --update add build-base gcc wget unzip
COPY . .
RUN env CGO_ENABLED=1 go build -o build/x-ui main.go
RUN ./DockerInit.sh "$TARGETARCH"
RUN if [ "$TARGETARCH" = "arm64" ]; then apt update && apt install gcc-aarch64-linux-gnu -y; fi
# Build the X-ui binary
RUN if [ "$TARGETARCH" = "arm64" ]; then \
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc go build -o xui-release -v main.go; \
elif [ "$TARGETARCH" = "amd64" ]; then \
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o xui-release -v main.go; \
fi
# Start a new stage using the base image
FROM ubuntu:20.04
# Set up the working directory
#Build app image using latest x-ui
FROM alpine
ENV TZ=Asia/Tehran
WORKDIR /app
# Copy the X-ui binary and required files from the builder stage
COPY --from=builder /app/xui-release /app/x-ui/xui-release
COPY x-ui.service /app/x-ui/x-ui.service
COPY x-ui.sh /app/x-ui/x-ui.sh
RUN apk add ca-certificates tzdata
# Set up the runtime environment
RUN apt-get update && apt-get install -y \
wget \
unzip \
tzdata \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app/x-ui/bin
# Download and set up the required files
RUN arch=$(uname -m) && \
if [ "$arch" = "aarch64" ]; then \
wget https://github.com/mhsanaei/xray-core/releases/latest/download/Xray-linux-arm64-v8a.zip \
&& unzip Xray-linux-arm64-v8a.zip \
&& rm -f Xray-linux-arm64-v8a.zip geoip.dat geosite.dat iran.dat \
&& wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat \
&& wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat \
&& wget https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat \
&& mv xray xray-linux-arm64; \
elif [ "$arch" = "x86_64" ]; then \
wget https://github.com/mhsanaei/Xray-core/releases/latest/download/Xray-linux-64.zip \
&& unzip Xray-linux-64.zip \
&& rm -f Xray-linux-64.zip geoip.dat geosite.dat iran.dat \
&& wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat \
&& wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat \
&& wget https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat \
&& mv xray xray-linux-amd64; \
fi
WORKDIR /app/x-ui
RUN chmod +x /app/x-ui/x-ui.sh
# Set the entrypoint
ENTRYPOINT ["/app/x-ui/xui-release"]
COPY --from=builder /app/build/ /app/
VOLUME [ "/etc/x-ui" ]
ENTRYPOINT [ "/app/x-ui" ]