Octave în Docker#

Acest miniarticol vă va fi de folos pentru a configura corect platforma Docker pe care se vor lucra laboratoarele practice de Metode Numerice.

Detalii suplimentare

Laborator: Metode Numerice (2023-2024)

1. Crearea imaginii#

Vom crea o imagine scriindu-ne propriul Dockerfile. Pentru aceasta, vom crea un fișier numit chiar Dockerfile în care vom trece următoarele reguli:

ARG BASE_CONTAINER=jupyter/minimal-notebook
FROM $BASE_CONTAINER

USER root

# Install octave
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get -yq dist-upgrade \
    && apt-get install -yq --no-install-recommends \
    octave \
    && apt update && apt install -yq gnuplot-qt \
    fonts-freefont-otf ghostscript \
    && rm -rf /var/lib/apt/lists/*


USER $NB_UID

# Install extra packages
RUN conda install --quiet --yes \
    'octave_kernel'  && \
    conda clean -tipy && \
    fix-permissions $CONDA_DIR && \
    fix-permissions /home/$NB_USER


USER $NB_UID

Pe scurt:

  • Pornim de la container-ul jupyter/minimal-notebook pentru a avea o instanță funcțională de Jupyter

  • Instalăm Octave și uneltele necesare pentru a putea crea ploturi;

  • Configurăm kernelul de Octave pentru Jupyter.

Comanda#

După ce a fost creat fișierul Dockerfile într-un folder oarecare (să zicem că va avea calea /path/to/Dockerfile), putem crea imaginea noastră rulând din terminal (echivalent, Command Prompt - cmd.exe - pentru Windows):

docker build -t new-nm-octave /path/to/Dockerfile

Astfel, se va crea imaginea denumită new-nm-octave.

2. Crearea unui container#

După ce ați creat imaginea, o putem folosi pentru a crea containere după chipul și asemănarea sa. Astfel, vom rula:

docker run --name new-octave-container -p 8888:8888 new-nm-octave

Comanda poate fi înțeleasă astfel:

  • Se creează (run) un container denumit new-octave-container (--name)...

  • ...pornind de la imaginea new-nm-octave...

  • ...și se face port forwarding (-p PORT_HOST:PORT_CONTAINER) astfel încât să putem accesa portul 8888 (PORT_CONTAINER) din afara containerului la adresa 8888 (PORT_HOST).

Accesarea containerului#

Containerul poate fi acum pornit și oprit în orice moment folosind docker start new-octave-container, respectiv docker stop new-octave-container.

3. Accesarea 127.0.0.1:8888#

Teoretic, puteți în acest moment să accesați din browser 127.0.0.1:8888, însă nu și practic. În realitate, Jupyter se folosește de token-uri unice pentru fiecare utilizator. Acest token apare în logul de pe ecran ce se formează atunci când vă creați containerul.

Dacă însă nu l-ați notat atunci, puteți folosi, pe Linux, următoarea comandă pentru a găsi adresa corectă pe care să o accesați:

docker logs new-octave-container 2>&1 >/dev/null | grep 'http://127.0.0.1:8888/lab?token' | tail -n1
Pentru Windows

Dacă folosiți un sistem de operare Windows, mutați-vă pe un sistem superior puteți să căutați manual în log, rulând simplu docker logs new-octave-container