aerospace_chatbot_ams / Dockerfile
dsmueller's picture
Added a few comments
7de30d0
# Use an official Python runtime as a parent image
FROM python:3.11.5-bookworm
# Do root things: clone repo and install dependencies. libsndfile1 for spotlight. libhdf5-serial-dev for vector distance.
USER root
RUN useradd -m -u 1000 user && chown -R user:user /home/user && chmod -R 777 /home/user
WORKDIR /clonedir
RUN apt-get update && \
apt-get install -y git
RUN git clone --depth 1 https://github.com/dan-s-mueller/aerospace_chatbot.git .
RUN apt-get update && apt-get install -y \
libhdf5-serial-dev \
libsndfile1 \
&& rm -rf /var/lib/apt/lists/*
USER user
# Set home to the user's home directory
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH
WORKDIR $HOME
# Create directories for the app code to be copied into
RUN mkdir $HOME/app
RUN mkdir $HOME/src
RUN mkdir $HOME/data
RUN mkdir $HOME/config
# Give all users read/write permissions to the app code directories
RUN chmod 777 $HOME/app
RUN chmod 777 $HOME/src
RUN chmod 777 $HOME/data
RUN chmod 777 $HOME/config
# Install Poetry
RUN pip3 install poetry==1.7.1
# Copy poetry files from repo into home. cp commands for non-local builds.
# COPY --chown=user:user pyproject.toml $HOME
RUN cp /clonedir/pyproject.toml $HOME
RUN chown user:user $HOME/pyproject.toml
# Disable virtual environments creation by Poetry as the Docker container itself is an isolated environment
RUN poetry config virtualenvs.in-project true
# Set the name of the virtual environment
RUN poetry config virtualenvs.path $HOME/.venv
# Set environment variables
ENV PATH="$HOME/.venv/bin:$PATH"
# Install dependencies using Poetry
RUN poetry install --no-root
# Copy the rest of your application code. Use cp for github config, followed by chown statements. cp commands for non-local builds.
# COPY --chown=user:user ./src $HOME/src
# COPY --chown=user:user ./data $HOME/data
# COPY --chown=user:user ./config $HOME/config
# COPY --chown=user:user ./app $HOME/app
RUN cp -R /clonedir/src /clonedir/data /clonedir/config /clonedir/app $HOME
RUN chown -R user:user $HOME/src $HOME/data $HOME/config $HOME/app
# Set up database path and env variabole. Comment out if running on hugging face spaces
# RUN mkdir $HOME/db
# RUN chmod 777 $HOME/db
# ENV LOCAL_DB_PATH=$HOME/db
# Set final work directory for the application
WORKDIR $HOME/app
RUN pwd
RUN ls -R
# Expose the port Streamlit runs on
EXPOSE 8501
EXPOSE 9000
# 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
# An ENTRYPOINT allows you to configure a container that will run as an executable.
# Here, it also contains the entire streamlit run command for your app, so you don’t have to call it from the command line
# Port 9000 will not be accessible from the hugging face space.
ENTRYPOINT ["streamlit", "run", "Home.py", "--server.port=8501", "--server.address=0.0.0.0"]
# Run this if you're running with terminal locally
# ENTRYPOINT ["/bin/bash", "-c"]
# To run locally
# docker build -t aerospace-chatbot .
# docker run --user 1000:1000 -p 8501:8501 -p 9000:9000 -it aerospace-chatbot
# To run locally with a terminal.
# docker build -t aerospace-chatbot .
# docker run --user 1000:1000 --entrypoint /bin/bash -it aerospace-chatbot
# To run remotely from hugging face spaces
# docker run -it --user 1000:1000 -p 7860:7860 --platform=linux/amd64 \
# registry.hf.space/ai-aerospace-aerospace-chatbots:latest