Utilisation de votre propre conteneur
Vous pouvez créer et utiliser un conteneur personnalisé (Utiliser votre propre conteneur ou BYOC) pour la création d'un travail et de ses exécutions.
La taille maximale d'une image de conteneur que vous pouvez utiliser avec les tâches est de 25 Go. La taille de l'image de conteneur ralentit le temps de provisionnement de la tâche en raison de l'extraction du conteneur à partir du registre de conteneurs. Nous vous recommandons d'utiliser les plus petites images de conteneur possibles.
Dockerfile
et une image. Vous commencez par un fichier Dockerfile
qui utilise une version réduite de l'image Python. Le fichier Dockerfile
permet de créer des sous-versions locales et distantes. Vous utilisez la sous-version locale pour tester localement le code. Lors du développement local, vous n'avez pas besoin de créer de nouvelle image à 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 le fichier Dockerfile
lorsque vous pensez avoir terminé le code et souhaitez 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.")
Avant de pouvoir pousser des images vers et depuis Oracle Cloud Infrastructure Registry (également appelé Registre de conteneurs), vous devez avoir un jeton d'autorisation Oracle Cloud Infrastructure. Vous voyez uniquement la chaîne du jeton d'authentification lors de sa création. Veillez à la copier immédiatement dans un emplacement sécurisé.