Adición de personalizaciones a imágenes

Después de descargar la imagen del tiempo de ejecución que desea personalizar, puede crear una nueva imagen personalizada añadiendo sus personalizaciones de software a la imagen descargada.

Las personalizaciones permiten una amplia gama de modificaciones de la imagen, incluida la instalación de:

Consulte los pasos siguientes para obtener detalles sobre el procedimiento general:

Pasos generales para crear imágenes personalizadas

Cree los tres scripts siguientes en un directorio vacío y personalice cada script para que se ajuste a sus necesidades.

  1. En un directorio vacío, cree el siguiente Dockerfile:

    ARG base_image_tag
    FROM ${base_image_tag}
    
    # ============
    # root section
    # ============
    USER root:root
    
    COPY install-as-root.sh /tmp/install/
    RUN umask 022 \
     && bash /tmp/install/install-as-root.sh \
     && /opt/ibm/build/bin/microdnf-clean.sh \
     && rm -rf /tmp/install
    # The microdnf-clean.sh script also grants required permissions.
    
    # -----------------------------------------
    # Change display name of the Jupyter kernel
    # -----------------------------------------
    # Changing the display name of the kernel allows for distinguishing different
    # custom images from the default runtime images when editing a notebook.
    # It is good practice, but not strictly required.
    
    RUN sed -i -e '/display_name/{s/",/ with modifications",/}' \
       /opt/ibm/run/kernels/*/kernel.json
    
    # ============
    # user section
    # ============
    USER wsbuild:wsbuild
    
    COPY --chown=wsbuild install-as-user.sh /tmp/install/
    RUN umask 002 \
     && bash /tmp/install/install-as-user.sh \
     && /opt/ibm/build/bin/fix-conda-permissions.sh \
     && conda run -n $DSX_KERNEL_CONDENV pip cache purge \
     && conda clean --tarballs \
     && rm -rf /tmp/install
    
    # ====
    # conda
    # ====
    USER nobody:wsbuild
    
  2. Edite el script Dockerfile :

    • Si añade archivos a la imagen personalizada, coloque las sentencias COPY en la sección raíz o en la sección de usuario del Dockerfile. Los archivos y directorios que deben ser grabables para los usuarios deben ser propiedad del grupo "wsbuild" (gid 3000) y tener permiso de escritura de grupo.
    • Opcionalmente, en la línea RUN sed, edite el comentario para incluir información para editores de cuadernos que les indique qué imagen personalizada están utilizando.
  3. A continuación, cree el siguiente script install-as-root.sh :

    #!/bin/bash
    set -e -o pipefail
    # =============================================================================
    # Commands in this script will be executed as root. Use this to...
    # - install operating system packages
    # - modify the installed JupyterLab and Notebook servers
    #
    # The IBM runtime images are based on Red Hat UBI minimal.
    # The package manager is microdnf, it uses yum repositories.
    # =============================================================================
    # update all operating system packages
    microdnf update -y
    
  4. Añada mandatos al final de install-as-root.sh si desea instalar paquetes del sistema operativo o realizar otras modificaciones que requieran permiso root. Por ejemplo, para instalar el paquete poppler-utils y sus dependencias desde los repositorios UBI de RedHat , añada:

    microdnf install -y --nodocs poppler-utils
    
  5. Por último, cree el script install-as-user.sh :

    #!/bin/bash
    set -e -o pipefail
    source activate $DSX_KERNEL_CONDENV
    # subsequent commands affect the conda environment for user code
    
  6. Edite install-as-user.sh y añada mandatos al final del script si desea instalar paquetes Python o R en el entorno conda donde se ejecutará el código de usuario. Por ejemplo, para instalar el paquete py4j del canal principal de Anaconda, y el paquete seawater de PyPI, añade:

    conda install py4j
    
    pip install seawater
    

    Debe instalar todos los paquetes conda antes que los paquetes pip. Además, debe instalar paquetes pip desde repositorios públicos como PyPI antes de añadir paquetes pip o ruedas utilizando COPY a la imagen personalizada.

Ejemplos de personalizaciones

Los ejemplos siguientes muestran diferentes formas en las que se pueden personalizar los tiempos de ejecución. Además de la instalación de bibliotecas a través de conda y pip, se pueden instalar extensiones como JupyterLab y extensiones de cuaderno Jupyter. Además, es posible personalizar RStudio utilizando el mismo método descrito anteriormente. Sin embargo, además de los entornos basados en Python, también es posible instalar paquetes desde CRAN.

Instalación de extensiones de cuaderno de Jupyter

El fragmento de código siguiente muestra los cambios necesarios en install-as-user.sh para instalar y habilitar las dos extensiones de cuaderno codefolding y freeze:

#!/bin/bash
set -e -o pipefail
source /opt/ibm/build/bin/installutils.sh
source activate $DSX_SYSTEM_CONDENV
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install  --symlink
jupyter nbextension enable codefolding/main --system
jupyter nbextension enable freeze/main --system

Instalación de extensiones de JupyterLab

El fragmento de código siguiente muestra los cambios necesarios en install-as-user.sh para instalar y habilitar las dos extensiones de JupyterLab jupyterlab-spreadsheet-editor y lckr-jupyterlab-variableinspector:

#!/bin/bash
set -e -o pipefail
source /opt/ibm/build/bin/installutils.sh
conda run -n $DSX_SYSTEM_CONDENV pip install \
   lckr-jupyterlab-variableinspector \
   jupyterlab-spreadsheet-editor
fix-condenv-access-system

Instalación de paquetes R en RStudio

El fragmento de código siguiente muestra los cambios necesarios en install-as-user.sh para instalar el paquete R foreign:

#!/bin/bash
set -e -o pipefail
source activate $DSX_KERNEL_CONDENV
# subsequent commands affect the conda environment for user code
# ========================================================
# Install R packages from CRAN or tar.gz file or conda repository
# below example installed foreign test package
# users can add any other additional packages similar way
# =======================================================
R -e "install.packages('foreign', repos='http://cran.rstudio.com')"

Consulte la sección Prácticas recomendadas para obtener más información.

Tema padre: Creación de una imagen personalizada