Skip to content

Commit bbb6ab6

Browse files
Merge pull request #361 from faltiska/smaller-docker-image
Smaller docker image
2 parents 29066f7 + acc671f commit bbb6ab6

File tree

2 files changed

+37
-67
lines changed

2 files changed

+37
-67
lines changed

docker/cpu/Dockerfile

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,17 @@
11
FROM python:3.10-slim
22

33
# Install dependencies and check espeak location
4-
RUN apt-get update && apt-get install -y \
5-
espeak-ng \
6-
espeak-ng-data \
7-
git \
8-
libsndfile1 \
9-
curl \
10-
ffmpeg \
11-
g++ \
12-
&& apt-get clean \
13-
&& rm -rf /var/lib/apt/lists/* \
14-
&& mkdir -p /usr/share/espeak-ng-data \
15-
&& ln -s /usr/lib/*/espeak-ng-data/* /usr/share/espeak-ng-data/
16-
17-
# Install UV using the installer script
18-
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
4+
# Rust is required to build sudachipy and pyopenjtalk-plus
5+
RUN apt-get update -y && \
6+
apt-get install -y espeak-ng espeak-ng-data git libsndfile1 curl ffmpeg g++ && \
7+
apt-get clean && rm -rf /var/lib/apt/lists/* && \
8+
mkdir -p /usr/share/espeak-ng-data && \
9+
ln -s /usr/lib/*/espeak-ng-data/* /usr/share/espeak-ng-data/ && \
10+
curl -LsSf https://astral.sh/uv/install.sh | sh && \
1911
mv /root/.local/bin/uv /usr/local/bin/ && \
20-
mv /root/.local/bin/uvx /usr/local/bin/
21-
22-
# Create non-root user and set up directories and permissions
23-
RUN useradd -m -u 1000 appuser && \
12+
mv /root/.local/bin/uvx /usr/local/bin/ && \
13+
curl https://sh.rustup.rs -sSf | sh -s -- -y && \
14+
useradd -m -u 1000 appuser && \
2415
mkdir -p /app/api/src/models/v1_0 && \
2516
chown -R appuser:appuser /app
2617

@@ -30,14 +21,9 @@ WORKDIR /app
3021
# Copy dependency files
3122
COPY --chown=appuser:appuser pyproject.toml ./pyproject.toml
3223

33-
# Install Rust (required to build sudachipy and pyopenjtalk-plus)
34-
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
35-
ENV PATH="/home/appuser/.cargo/bin:$PATH"
36-
37-
# Install dependencies
38-
RUN --mount=type=cache,target=/root/.cache/uv \
39-
uv venv --python 3.10 && \
40-
uv sync --extra cpu
24+
# Install dependencies with CPU extras
25+
RUN uv venv --python 3.10 && \
26+
uv sync --extra cpu --no-cache
4127

4228
# Copy project files including models
4329
COPY --chown=appuser:appuser api ./api
@@ -46,21 +32,21 @@ COPY --chown=appuser:appuser docker/scripts/ ./
4632
RUN chmod +x ./entrypoint.sh
4733

4834
# Set environment variables
49-
ENV PYTHONUNBUFFERED=1 \
35+
ENV PATH="/home/appuser/.cargo/bin:/app/.venv/bin:$PATH" \
36+
PYTHONUNBUFFERED=1 \
5037
PYTHONPATH=/app:/app/api \
51-
PATH="/app/.venv/bin:$PATH" \
5238
UV_LINK_MODE=copy \
5339
USE_GPU=false \
5440
PHONEMIZER_ESPEAK_PATH=/usr/bin \
5541
PHONEMIZER_ESPEAK_DATA=/usr/share/espeak-ng-data \
56-
ESPEAK_DATA_PATH=/usr/share/espeak-ng-data
42+
ESPEAK_DATA_PATH=/usr/share/espeak-ng-data \
43+
DEVICE="cpu"
5744

5845
ENV DOWNLOAD_MODEL=true
5946
# Download model if enabled
6047
RUN if [ "$DOWNLOAD_MODEL" = "true" ]; then \
6148
python download_model.py --output api/src/models/v1_0; \
6249
fi
6350

64-
ENV DEVICE="cpu"
6551
# Run FastAPI server through entrypoint.sh
6652
CMD ["./entrypoint.sh"]

docker/gpu/Dockerfile

Lines changed: 20 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,15 @@
1-
FROM --platform=$BUILDPLATFORM nvidia/cuda:12.8.1-cudnn-runtime-ubuntu24.04
2-
# Set non-interactive frontend
3-
ENV DEBIAN_FRONTEND=noninteractive
1+
FROM --platform=$BUILDPLATFORM nvidia/cuda:12.8.1-base-ubuntu24.04
42

53
# Install Python and other dependencies
6-
RUN apt-get update && apt-get install -y \
7-
python3.10 \
8-
python3-venv \
9-
espeak-ng \
10-
espeak-ng-data \
11-
git \
12-
libsndfile1 \
13-
curl \
14-
ffmpeg \
15-
g++ \
16-
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
17-
&& mkdir -p /usr/share/espeak-ng-data \
18-
&& ln -s /usr/lib/*/espeak-ng-data/* /usr/share/espeak-ng-data/
19-
20-
# Install UV using the installer script
21-
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
4+
RUN apt-get update -y && \
5+
apt-get install -y python3.10 python3-venv espeak-ng espeak-ng-data git libsndfile1 curl ffmpeg g++ && \
6+
apt-get clean && rm -rf /var/lib/apt/lists/* && \
7+
mkdir -p /usr/share/espeak-ng-data && \
8+
ln -s /usr/lib/*/espeak-ng-data/* /usr/share/espeak-ng-data/ && \
9+
curl -LsSf https://astral.sh/uv/install.sh | sh && \
2210
mv /root/.local/bin/uv /usr/local/bin/ && \
23-
mv /root/.local/bin/uvx /usr/local/bin/
24-
25-
# Create non-root user and set up directories and permissions
26-
RUN useradd -m -u 1001 appuser && \
11+
mv /root/.local/bin/uvx /usr/local/bin/ && \
12+
useradd -m -u 1001 appuser && \
2713
mkdir -p /app/api/src/models/v1_0 && \
2814
chown -R appuser:appuser /app
2915

@@ -33,14 +19,9 @@ WORKDIR /app
3319
# Copy dependency files
3420
COPY --chown=appuser:appuser pyproject.toml ./pyproject.toml
3521

36-
ENV PHONEMIZER_ESPEAK_PATH=/usr/bin \
37-
PHONEMIZER_ESPEAK_DATA=/usr/share/espeak-ng-data \
38-
ESPEAK_DATA_PATH=/usr/share/espeak-ng-data
39-
40-
# Install dependencies with GPU extras (using cache mounts)
41-
RUN --mount=type=cache,target=/root/.cache/uv \
42-
uv venv --python 3.10 && \
43-
uv sync --extra gpu
22+
# Install dependencies with GPU extras
23+
RUN uv venv --python 3.10 && \
24+
uv sync --extra gpu --no-cache
4425

4526
# Copy project files including models
4627
COPY --chown=appuser:appuser api ./api
@@ -50,18 +31,21 @@ RUN chmod +x ./entrypoint.sh
5031

5132

5233
# Set all environment variables in one go
53-
ENV PYTHONUNBUFFERED=1 \
34+
ENV PATH="/app/.venv/bin:$PATH" \
35+
PYTHONUNBUFFERED=1 \
5436
PYTHONPATH=/app:/app/api \
55-
PATH="/app/.venv/bin:$PATH" \
5637
UV_LINK_MODE=copy \
57-
USE_GPU=true
58-
38+
USE_GPU=true \
39+
PHONEMIZER_ESPEAK_PATH=/usr/bin \
40+
PHONEMIZER_ESPEAK_DATA=/usr/share/espeak-ng-data \
41+
ESPEAK_DATA_PATH=/usr/share/espeak-ng-data \
42+
DEVICE="gpu"
43+
5944
ENV DOWNLOAD_MODEL=true
6045
# Download model if enabled
6146
RUN if [ "$DOWNLOAD_MODEL" = "true" ]; then \
6247
python download_model.py --output api/src/models/v1_0; \
6348
fi
6449

65-
ENV DEVICE="gpu"
6650
# Run FastAPI server through entrypoint.sh
6751
CMD ["./entrypoint.sh"]

0 commit comments

Comments
 (0)