rkihacker commited on
Commit
686e475
·
verified ·
1 Parent(s): e5e4b1d

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +30 -10
Dockerfile CHANGED
@@ -1,20 +1,40 @@
1
- # Use an official Python runtime as a parent image
2
- FROM python:3.9-slim
3
 
4
- # Set the working directory in the container
5
  WORKDIR /app
6
 
7
- # Copy the requirements file into the container at /app
8
- COPY requirements.txt .
9
 
10
- # Install any needed packages specified in requirements.txt
 
11
  RUN pip install --no-cache-dir -r requirements.txt
12
 
13
- # Copy the rest of the application code into the container at /app
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  COPY . .
15
 
16
- # Make port 8000 available to the world outside this container
 
 
 
 
 
 
17
  EXPOSE 8000
18
 
19
- # Run main.py when the container launches
20
- CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
 
1
+ # --- Stage 1: Build Dependencies ---
2
+ FROM python:3.9-slim as builder
3
 
4
+ # Set working directory
5
  WORKDIR /app
6
 
7
+ # Install uvloop first as it's a build dependency for some packages
8
+ RUN pip install --no-cache-dir uvloop
9
 
10
+ # Copy requirements and install them
11
+ COPY requirements.txt .
12
  RUN pip install --no-cache-dir -r requirements.txt
13
 
14
+
15
+ # --- Stage 2: Final Production Image ---
16
+ FROM python:3.9-slim
17
+
18
+ # Set the working directory
19
+ WORKDIR /app
20
+
21
+ # Create a non-root user and group for security
22
+ RUN addgroup --system app && adduser --system --group app
23
+
24
+ # Copy installed packages from the builder stage
25
+ COPY --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
26
+
27
+ # Copy the application code
28
  COPY . .
29
 
30
+ # Change ownership of the app directory to the non-root user
31
+ RUN chown -R app:app /app
32
+
33
+ # Switch to the non-root user
34
+ USER app
35
+
36
+ # Expose the port the app runs on
37
  EXPOSE 8000
38
 
39
+ # Run the application using Gunicorn
40
+ CMD ["gunicorn", "-c", "gunicorn_conf.py", "main:app"]