Добавить PrettyMaps/Dockerfile
This commit is contained in:
@@ -0,0 +1,153 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
#
|
||||||
|
# Build without proxy:
|
||||||
|
# DOCKER_BUILDKIT=1 docker build -t prettymaps-docker-test .
|
||||||
|
#
|
||||||
|
# Build with SOCKS5 proxy:
|
||||||
|
# DOCKER_BUILDKIT=1 docker build --network=host \
|
||||||
|
# --build-arg PROXY_SOCKS5=$PROXY_IP:$PROXY_PORT \
|
||||||
|
# -t prettymaps-docker-test .
|
||||||
|
#
|
||||||
|
# Do not upgrade pip (newer pip+urllib3 may break SOCKS).
|
||||||
|
# Pre-install shapely to avoid resolver loops on shapely[vectorized].
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
# Stage 1: builder
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FROM debian:bookworm-slim AS builder
|
||||||
|
|
||||||
|
ARG PROXY_SOCKS5=""
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
ENV LANG=C.UTF-8 \
|
||||||
|
LC_ALL=C.UTF-8 \
|
||||||
|
PYTHONUNBUFFERED=1 \
|
||||||
|
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
||||||
|
PIP_DEFAULT_TIMEOUT=120 \
|
||||||
|
PIP_PREFER_BINARY=1
|
||||||
|
|
||||||
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
|
rm -f /etc/apt/apt.conf.d/docker-clean && \
|
||||||
|
apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
python3-venv \
|
||||||
|
python3-dev \
|
||||||
|
python3-socks \
|
||||||
|
build-essential \
|
||||||
|
gdal-bin \
|
||||||
|
libgdal-dev \
|
||||||
|
libgeos-dev \
|
||||||
|
libproj-dev \
|
||||||
|
libspatialindex-dev \
|
||||||
|
git \
|
||||||
|
fonts-dejavu-core
|
||||||
|
|
||||||
|
# Python environment
|
||||||
|
RUN python3 -m venv --system-site-packages /opt/venv
|
||||||
|
|
||||||
|
ENV PATH="/opt/venv/bin:$PATH"
|
||||||
|
|
||||||
|
# Optional SOCKS5 proxy.
|
||||||
|
# Empty PROXY_SOCKS5 disables the proxy.
|
||||||
|
# Proxy settings apply only to the builder stage.
|
||||||
|
|
||||||
|
ENV ALL_PROXY=${PROXY_SOCKS5:+socks5h://}${PROXY_SOCKS5}
|
||||||
|
|
||||||
|
ENV HTTP_PROXY=${ALL_PROXY} \
|
||||||
|
HTTPS_PROXY=${ALL_PROXY} \
|
||||||
|
http_proxy=${ALL_PROXY} \
|
||||||
|
https_proxy=${ALL_PROXY} \
|
||||||
|
no_proxy=localhost,127.0.0.1
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
# Python dependencies
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# 1. Base tooling, NumPy and Shapely
|
||||||
|
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||||
|
pip install \
|
||||||
|
setuptools \
|
||||||
|
wheel \
|
||||||
|
pysocks \
|
||||||
|
"numpy>=1.26.4" \
|
||||||
|
"shapely>=2.0.0"
|
||||||
|
|
||||||
|
# 2. Prettymaps runtime dependencies
|
||||||
|
# Streamlit and Marimo are intentionally excluded.
|
||||||
|
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||||
|
pip install \
|
||||||
|
"matplotlib>=3.9.0" \
|
||||||
|
"osmnx>=2.0.5" \
|
||||||
|
"rasterio>=1.4.3" \
|
||||||
|
"rioxarray>=0.18.2" \
|
||||||
|
"opencv-python-headless>=4.11.0.86" \
|
||||||
|
"scikit-image>=0.25.2" \
|
||||||
|
"thefuzz>=0.22.1" \
|
||||||
|
"elevation>=1.1.3" \
|
||||||
|
"tqdm>=4.70.0" \
|
||||||
|
"scikit-learn>=1.6.1" \
|
||||||
|
"vsketch>=1.0.0" \
|
||||||
|
"ipython" \
|
||||||
|
"ipykernel>=6.29.5"
|
||||||
|
|
||||||
|
# 3. Prettymaps without optional dependencies
|
||||||
|
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||||
|
pip install prettymaps --no-deps
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
# Stage 2: runtime
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FROM debian:bookworm-slim AS runtime
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
ENV LANG=C.UTF-8 \
|
||||||
|
LC_ALL=C.UTF-8 \
|
||||||
|
PYTHONUNBUFFERED=1 \
|
||||||
|
PATH="/opt/venv/bin:$PATH"
|
||||||
|
|
||||||
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||||
|
rm -f /etc/apt/apt.conf.d/docker-clean && \
|
||||||
|
apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates \
|
||||||
|
python3 \
|
||||||
|
python3-socks \
|
||||||
|
gdal-bin \
|
||||||
|
libgdal32 \
|
||||||
|
libgeos-c1v5 \
|
||||||
|
libproj25 \
|
||||||
|
libspatialindex6 \
|
||||||
|
fonts-dejavu-core \
|
||||||
|
libgl1 \
|
||||||
|
libglib2.0-0 \
|
||||||
|
libxkbcommon0 \
|
||||||
|
libdbus-1-3 \
|
||||||
|
libxcb-cursor0 \
|
||||||
|
libxcb-xinerama0
|
||||||
|
|
||||||
|
# Copy Python virtual environment
|
||||||
|
COPY --from=builder /opt/venv /opt/venv
|
||||||
|
|
||||||
|
# Application
|
||||||
|
WORKDIR /work
|
||||||
|
|
||||||
|
VOLUME /work
|
||||||
|
|
||||||
|
COPY generate.py /opt/generate.py
|
||||||
|
|
||||||
|
# Prefer user-provided script from /work.
|
||||||
|
# Fall back to the bundled script.
|
||||||
|
|
||||||
|
ENTRYPOINT ["sh", "-c", "script=generate.py; if [ -f \"/work/$script\" ]; then exec python3 \"/work/$script\" \"$@\"; else exec python3 \"/opt/$script\" \"$@\"; fi", "--"]
|
||||||
|
|
||||||
|
CMD []
|
||||||
Reference in New Issue
Block a user