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.
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. 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.")
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.