In this article, I'll walk you through the steps I took to revamp my aging Python applications and migrate them to a Docker container on a production server.
Several years ago, I had a collection of Python applications that I shared with my coworkers using an old Windows server. This server hosted Jupyter Notebook with remote access enabled.
Today, to my surprise, I realised that some of these scripts were still being actively used by a group of users.
I decided to migrate the jupyter notebook server to a Docker container.
We need a
Dockerfile, which is essentially a recipe for building a Docker image. This file included all the necessary instructions to set up a Python environment, install the required libraries, and configure Jupyter Notebook.
# Use an official Python 3.11 image FROM python:bookworm # Need voila to serve the scripts as applications RUN pip install voila RUN pip install notebook # Create the isolated dir on docker RUN mkdir /jupyterbooks WORKDIR /jupyterbooks EXPOSE 8888 # Run jupyter with remote access enabled CMD sh -c "jupyter notebook --no-browser --allow-root --IdentityProvider.token='yourSecretToken' --ServerApp.allow_origin='*' --ServerApp.port=8888 --ServerApp.allow_remote_access=True --ServerApp.ip='0.0.0.0'"
Also created a
docker-compose.yml file to configure the container
version: "3.3" services: jupyter-service: container_name: jupyter-service build: context: . dockerfile: Dockerfile image: jupyter-service restart: always ports: - 8888:8888 volumes: - jupyter-data:/jupyterbooks volumes: jupyter-data: name: jupyter-data
Copied the old scripts at the new docker jupyter-data volume with
docker cp myNotebooks jupyter-service:/jupyterbooks/
docker compose up -d does the trick.
I'ts amazing how two short files can configure such a service.
Now I can access the notebook with my token and the users can consume the applications without password through voila.