# Use an official Python runtime as a parent image FROM python:3.11.1 # Set up user and paths RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH # WORKDIR $HOME/app # COPY --chown=user . $HOME/app # Set the working directory in the container WORKDIR $HOME/app # Copy the current directory contents into the container at /usr/src/app # COPY . . COPY --chown=user . $HOME/app # Install dependencies # RUN poetry config virtualenvs.create false \ # && poetry install --no-interaction --no-ansi # Streamlit must be installed separately. Potentially this will cause an issue with dependencies in the future, but it's the only way it works. # RUN pip3 install streamlit # Run the container as root USER root # Install Rust and Cargo RUN apt-get update # RUN apt-get install -y curl build-essential # RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ # . $HOME/.cargo/env RUN pip install --upgrade pip # Install dependencies RUN pip install -r requirements.txt # Make a port available to the world outside this container # The EXPOSE instruction informs Docker that the container listens on the specified network ports at runtime. Your container needs to listen to Streamlit’s (default) port 8501. EXPOSE 8501 # The HEALTHCHECK instruction tells Docker how to test a container to check that it is still working. Your container needs to listen to Streamlit’s (default) port 8501: HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health # Set the permissions for the script file # RUN chmod +x python 3 train_llm.py # Change permissions of the working directory # RUN chmod 777 /app # Gives all users read, write, and exec permissions in the app directory. # Run the command inside your image filesystem. CMD ["python", "train_llm.py"] # Execute with: # docker build -t . # docker run -p 8501:8501