From 6fc07b76762e5ea8518b32cf9dbbb1027fb702e7 Mon Sep 17 00:00:00 2001 From: Yojana Gadiya <45199062+YojanaGadiya@users.noreply.github.com> Date: Thu, 10 Oct 2024 11:40:42 +0200 Subject: [PATCH] add docker files --- .github/workflows/build_publish.yaml | 44 ++++++++++++++++++++++++++++ Dockerfile | 40 +++++++++++++++++++++++++ start-script.sh | 3 ++ 3 files changed, 87 insertions(+) create mode 100644 .github/workflows/build_publish.yaml create mode 100644 Dockerfile create mode 100644 start-script.sh diff --git a/.github/workflows/build_publish.yaml b/.github/workflows/build_publish.yaml new file mode 100644 index 0000000..17f5915 --- /dev/null +++ b/.github/workflows/build_publish.yaml @@ -0,0 +1,44 @@ +name: Create and publish a Docker image to ghcr.io + +on: + push: + branches: + - main + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value={{date 'YYYYMMDD-HHmmss' tz='Europe/Stockholm'}} + + - name: Build and push Docker image + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..27f805f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# Select base image (can be ubuntu, python, shiny etc) +FROM python:3.10-slim + +# Create user name and home directory variables. +# The variables are later used as $USER and $HOME. +ENV USER=username +ENV HOME=/home/$USER + +# Add user to system +RUN useradd -m -u 1000 $USER + +# Set working directory (this is where the code should go) +WORKDIR $HOME/datascience_toolkit + +# Update system and install dependencies. +RUN apt-get update && apt-get install --no-install-recommends -y \ + build-essential \ + software-properties-common + +# Copy code and start script (this will place the files in home/username/) +COPY .streamlit $HOME/datascience_toolkit/.streamlit +COPY requirements.txt $HOME/datascience_toolkit/requirements.txt +COPY pages $HOME/datascience_toolkit/pages/ +COPY images $HOME/datascience_toolkit/images/ +COPY data $HOME/datascience_toolkit/data/ +COPY Main.py $HOME/datascience_toolkit/Main.py +COPY kgg_utils.py $HOME/datascience_toolkit/kgg_utils.py +COPY start-script.sh $HOME/datascience_toolkit/start-script.sh + +RUN pip install --no-cache-dir -r requirements.txt \ + && chmod +x start-script.sh \ + && chown -R $USER:$USER $HOME \ + && rm -rf /var/lib/apt/lists/* + +USER $USER +EXPOSE 8501 + +HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health + +ENTRYPOINT ["./start-script.sh"] \ No newline at end of file diff --git a/start-script.sh b/start-script.sh new file mode 100644 index 0000000..9dd181b --- /dev/null +++ b/start-script.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +streamlit run Main.py --server.port=8501 --server.address=0.0.0.0 \ No newline at end of file