From ac7bafa7b37cc50552e99f3d89a240207a7374da Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Fri, 20 Dec 2024 20:39:03 +1100 Subject: [PATCH] feat: enable multirelease - manage almalinux 8 and 9 deployments --- Makefile | 57 ++++++++++++++++++------------ Dockerfile => release/8/Dockerfile | 0 release/9/Dockerfile | 43 ++++++++++++++++++++++ 3 files changed, 77 insertions(+), 23 deletions(-) rename Dockerfile => release/8/Dockerfile (100%) create mode 100644 release/9/Dockerfile diff --git a/Makefile b/Makefile index 3507a8c..896ae3f 100644 --- a/Makefile +++ b/Makefile @@ -1,37 +1,48 @@ -# Get the current Git commit hash +# Variables GIT_COMMIT := $(shell git rev-parse --short HEAD) - -# Get the current date in YYYYMMDD format DATE_TAG := $(shell date +%Y%m%d) - -# Set the Docker image name and repository information -IMAGE_NAME := almalinux8-jupyterinstance REGISTRY := git.query.consul OWNER := unkin -# Build the Docker image (without tags) -build: - docker build --network=host -t $(REGISTRY)/$(OWNER)/$(IMAGE_NAME) . +# List of releases (directories under ./release) +RELEASES := $(shell find release -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) -# Tag the Docker image with the Git commit hash, the date, and 'latest' -tag: - docker tag $(REGISTRY)/$(OWNER)/$(IMAGE_NAME) $(REGISTRY)/$(OWNER)/$(IMAGE_NAME):$(GIT_COMMIT) - docker tag $(REGISTRY)/$(OWNER)/$(IMAGE_NAME) $(REGISTRY)/$(OWNER)/$(IMAGE_NAME):$(DATE_TAG) - docker tag $(REGISTRY)/$(OWNER)/$(IMAGE_NAME) $(REGISTRY)/$(OWNER)/$(IMAGE_NAME):latest +# Build all releases +build: $(addprefix build-,$(RELEASES)) -# Push the Docker image to a repository with all tags -push: tag - docker push $(REGISTRY)/$(OWNER)/$(IMAGE_NAME):$(GIT_COMMIT) - docker push $(REGISTRY)/$(OWNER)/$(IMAGE_NAME):$(DATE_TAG) - docker push $(REGISTRY)/$(OWNER)/$(IMAGE_NAME):latest +# Tag all releases +tag: $(addprefix tag-,$(RELEASES)) -# Clean up dangling Docker images +# Push all releases +push: $(addprefix push-,$(RELEASES)) + +# Clean dangling images clean: docker image prune -f - sudo docker rm jupyterinstance -test: - sudo docker run -it --name jupyterinstance --entrypoint /bin/bash -v jupyterhub-test:/home/jupyter/work $(REGISTRY)/$(OWNER)/$(IMAGE_NAME):latest +# List all available releases +list: + @echo "Available releases:" + @echo $(RELEASES) | tr ' ' '\n' + +# Build a specific release +build-%: + $(info Building almalinux$*-jupyterinstance Docker image) + docker build --network=host -t $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance -f release/$*/Dockerfile release/$* + +# Tag a specific release +tag-%: + $(info Tagging almalinux$*-jupyterinstance Docker image) + docker tag $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance:$(GIT_COMMIT) + docker tag $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance:$(DATE_TAG) + docker tag $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance:latest + +# Push a specific release +push-%: tag-% + $(info Pushing almalinux$*-jupyterinstance Docker image) + docker push $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance:$(GIT_COMMIT) + docker push $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance:$(DATE_TAG) + docker push $(REGISTRY)/$(OWNER)/almalinux$*-jupyterinstance:latest # Default target default: build diff --git a/Dockerfile b/release/8/Dockerfile similarity index 100% rename from Dockerfile rename to release/8/Dockerfile diff --git a/release/9/Dockerfile b/release/9/Dockerfile new file mode 100644 index 0000000..077238b --- /dev/null +++ b/release/9/Dockerfile @@ -0,0 +1,43 @@ +# Start with the AlmaLinux 8.10 base image +FROM git.query.consul/unkin/almalinux9:latest + +# Clean and update the repository cache +RUN dnf clean all && \ + dnf makecache + +# Install packages +RUN dnf install -y python3.12 python3.12-pip + +# Cleanup +RUN dnf clean all && \ + rm -rf /var/cache/dnf + +# create venv for jupyter +RUN python3.12 -m venv /opt/jupyter + +# upgrade pip +RUN /opt/jupyter/bin/python -m pip install --upgrade pip + +# install requirements for jupyterhub-singleinstance +RUN /opt/jupyter/bin/pip install \ + 'jupyterhub==5.2.1' \ + 'notebook==7.2.2' + +# install additional python modules +RUN /opt/jupyter/bin/pip install \ + numpy \ + pandas \ + matplotlib \ + pyarrow \ + pyyaml + +# create a user, since we don't want to run as root +RUN useradd -m jupyter +ENV HOME=/home/jupyter +RUN mkdir $HOME/work +RUN chown jupyter:jupyter $HOME/work +WORKDIR $HOME/work +USER jupyter + +# set the default command +CMD ["/opt/jupyter/bin/jupyterhub-singleuser"]