Esta página ha sido traducida por una máquina.

Traiga su propio contenedor

Puede crear y utilizar un contenedor personalizado (Traiga su propio contenedor o BYOC) para su uso al crear un trabajo y ejecutar trabajos.

El tamaño máximo de una imagen de contenedor que puede utilizar con trabajos es de 25 GB. El tamaño de la imagen de contenedor ralentiza el tiempo de aprovisionamiento del trabajo debido a la extracción del contenedor de Container Registry. Le recomendamos que utilice las imágenes de contenedor más pequeñas posibles.

Para ejecutar el trabajo, debe crear su propio Dockerfile y una imagen. Empiece por un Dockerfile que utilice la imagen reducida de Python. Dockerfile se ha diseñado para que pueda crear compilaciones locales y remotas. Utilice la compilación local cuando realice una prueba local con el código. Durante el desarrollo local, no es necesario crear una nueva imagen para cada cambio de código.
Nota

No almacene archivos en el directorio /home/datascience. Cuando se aprovisiona el contenedor y se ejecuta como una ejecución de trabajo, se sustituyen cuando se encuentra en este directorio.

Utilice la opción remota para ejecutar Dockerfile cuando crea que el código está completo y desee ejecutarlo como un trabajo como en este ejemplo de Dockerfile:

ARG type

FROM python:3.8-slim AS base

ENV DATASCIENCE_USER datascience
ENV DATASCIENCE_UID 1000
ENV HOME /home/$DATASCIENCE_USER

RUN python -m pip install \
        parse \
        oci


FROM base AS run-type-local
# nothing to see here

FROM base AS run-type-remote
COPY job_logs.py .
CMD ["python", "job_logs.py"]

FROM run-type-${type} AS final

A continuación se muestra un archivo job_logs.py de ejemplo:

import oci
import datetime
import os
import time
import sys
import uuid
from oci.loggingingestion import LoggingClient
from oci.loggingingestion.models import PutLogsDetails, LogEntryBatch, LogEntry

OCI_RESOURCE_PRINCIPAL_VERSION = "OCI_RESOURCE_PRINCIPAL_VERSION"
JOB_RUN_OCID_KEY = "JOB_RUN_OCID"

# switch
class Job:
    def __init__(self):
        rp_version = os.environ.get(OCI_RESOURCE_PRINCIPAL_VERSION, "UNDEFINED")
        if not rp_version or rp_version == "UNDEFINED":
            # RUN LOCAL TEST
            self.signer = oci.config.from_file("~/.oci/config", "BIGDATA")
        else:
            # RUN AS JOB
            self.signer = oci.auth.signers.get_resource_principals_signer()


job = Job()

print(
    "Start logging for job run: {}".format(
        os.environ.get(JOB_RUN_OCID_KEY, "LOCAL")
    )
)
print("Current timestamp in UTC: {}".format(str(datetime.datetime.utcnow())))

print("Delay 5s")

time.sleep(5)

print("... another stdout")

print("Print all environment variables and values")

for item, value in os.environ.items():
    print("{}: {}".format(item, value))

print("Docker Job Done.")
Consejo

Hemos proporcionado varios ejemplos para ayudarte a comenzar.

Para poder transferir y extraer imágenes de Oracle Cloud Infrastructure Registry (también conocido como Container Registry), debe tener un token de autorización de Oracle Cloud Infrastructure. Solo verá la cadena de token de autenticación al crearla, así que asegúrese de copiar el token de autenticación en una ubicación segura inmediatamente.

  1. Para ver los detalles: en la barra de navegación, seleccione el menú Perfil y, a continuación, seleccione Configuración de usuario o Mi perfil, según la opción que vea.
  2. En la página Tokens de autenticación, haga clic en Generar token.
  3. Introduzca una descripción fácil de recordar para el token de autenticación. Evite introducir información confidencial.
  4. Haga clic en Generar token. Aparece el nuevo token de autenticación.
  5. Copie el token de autenticación inmediatamente en una ubicación segura donde pueda recuperarlo más tarde. No volverá a ver el token de autenticación en la consola.
  6. Cierre el cuadro de diálogo Generar token.
  7. Abra una ventana de terminal en la máquina local.
  8. Conéctese a Container Registry para crear, ejecutar, probar, etiquetar y transferir la imagen de contenedor.
    docker login -u '<tenant-namespace>/<username>' <region>.ocir.io
    OpciónDescripción
    Ejecutar localmente

    Crea el archivo docker, pero no incluye el código para una ejecución rápida, depuración, etc.:

    docker build --build-arg type=local -t byoc .
    Ejecutar como trabajo

    Crea el archivo docker con el código en el que está listo para ejecutarse como trabajo:

    docker build --build-arg type=remote -t byoc .
    OpciónDescripción
    Prueba local con la ubicación de código montada

    Se ha montado la clave de autorización de API para el directorio de usuario del directorio raíz de docker ./oci. Si utiliza un usuario diferente en la imagen de docker, debe cambiar la ruta de acceso /home/datascience/.oci. Por ejemplo, si utiliza una cuenta raíz, cambie la ruta a /root/.oci.

    docker run --rm -v $HOME/.oci:/home/datascience/.oci -v $PWD:/app byoc python /app/job_logs.py
    
    La prueba local con el código está en el contenedor

    Incluso cuando el contenedor se crea mediante la opción remote para almacenar el código en la imagen, para una ejecución local, el token de autenticación de la API de OCI sigue siendo necesario.

    docker run --rm -v $HOME/.oci:/home/datascience/.oci -v $PWD:/app byoc
  9. Introducir y examinar el código de contenedor
    docker run -it byoc sh
    ls
    exit
  10. Etiquete la imagen de contenedor local:
    docker login -u '<tenant-namespace>/<username>' <region>.ocir.io
    docker tag byoc:latest<region>.ocir.io/<tenancy-name>/byoc:1.0
  11. Transfiera la imagen del contenedor:
    docker push <region>.ocir.io/<tenancy>/byoc:1.0
  12. Asegúrese de que los trabajos tengan una política para que la entidad de recurso le permita leer OCIR desde el compartimento en el que ha almacenado la imagen.
    allow dynamic-group {<your-dynamic-group-name>} to read repos in compartment {<your-compartment-name>}
  13. (Opcional) Firme la imagen de contenedor. Esto solo es necesario si está utilizando la verificación de firma de imagen.
  14. (Opcional) Asegúrese de que los trabajos tienen una política para que la entidad de recurso le permita utilizar el servicio de almacén desde el compartimento donde se almacenan las claves de almacén para la firma de imagen. La política solo es necesaria para la verificación de firmas de imágenes.
    Allow dynamic-group <dynamic-group-name> to use vaults in compartment <compartment-name>
    Allow dynamic-group <dynamic-group-name> to use keys in compartment <compartment-name>
    Allow dynamic-group <dynamic-group-name> to use secret-family in compartment <compartment-name>
  15. Seleccione una de las siguientes opciones para crear un trabajo:
    • BYOC versión 2: Crear un trabajo mediante la ventana emergente de configuración de entorno. Consulte el paso 9 en Creación de un trabajo.
    • BYOC versión 1: cree un trabajo mediante la variable de entorno de trabajo, apuntando a la ubicación de la imagen de contenedor en OCIR para ejecutarlo como trabajo:
      CONTAINER_CUSTOM_IMAGE=iad.ocir.io/mytenancynamespace/byoc:1.0
      Nota

      La versión 1 de BYOC ahora está en desuso y no es el método recomendado.

¿Le ha resultado útil este artículo?