Utilisation de votre propre conteneur
Vous pouvez créer et utiliser un conteneur personnalisé (Utiliser votre propre conteneur ou BYOC) à utiliser lorsque vous créez un travail et des traitements de travail.
La taille maximale d'une image de conteneur que vous pouvez utiliser avec des travaux est de 25 Go. La taille de l'image de conteneur ralentit le temps de provisionnement du travail en raison de l'extraction de conteneur à partir de Container Registry. Nous vous recommandons d'utiliser les plus petites images de conteneur possibles.
Dockerfile
et créer une image. Vous commencez par Dockerfile
, qui utilise l'image mince Python. Le fichier Docker
est conçu pour que vous puissiez créer des builds locaux et distants. Utilisez le build local lorsque vous effectuez un test local sur le code. Lors du développement local, vous n'avez pas besoin de créer une image pour chaque modification de code. Ne stockez pas les fichiers dans le répertoire
/home/datascience
. Lorsque le conteneur est provisionné et exécuté en tant qu'exécution de travail, il est remplacé dans ce répertoire.Utilisez l'option distante pour exécuter Dockerfile
lorsque vous pensez que le code est terminé et que vous voulez l'exécuter en tant que travail, comme dans cet exemple 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
Voici un exemple de fichier job_logs.py
:
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.")
Pour pouvoir propager et extraire des images dans Oracle Cloud Infrastructure Registry (également appelé Container Registry), vous devez disposer d'un jeton d'autorisation Oracle Cloud Infrastructure. La chaîne du jeton d'authentification apparaît uniquement lors de sa création. Veillez donc à copier immédiatement le jeton d'authentification vers un emplacement sécurisé.