Bring Your Own Container
Puoi creare e utilizzare un contenitore personalizzato (Bring Your Own Container o BYOC) da utilizzare quando crei un job e le esecuzioni di job.
La dimensione massima di un'immagine contenitore che è possibile utilizzare con i job è di 25 GB. La dimensione dell'immagine del contenitore rallenta il tempo di provisioning per il job a causa dell'estrazione del contenitore dal Container Registry. Si consiglia di utilizzare le immagini del contenitore più piccole possibili.
Dockerfile
e creare un'immagine. Si inizia con un file Dockerfile
che utilizza l'immagine sottile Python. Dockerfile
è progettato per consentire la creazione di build locali e remote. La build locale viene utilizzata quando si esegue il test a livello locale rispetto al codice. Durante lo sviluppo locale, non è necessario creare una nuova immagine per ogni modifica del codice. Non memorizzare i file nella directory
/home/datascience
. Quando viene eseguito il provisioning e l'esecuzione del contenitore come esecuzione job, viene eseguito l'override quando si trova in questa directory.Utilizzare l'opzione remota per eseguire il comando Dockerfile
quando si ritiene che il codice sia completo e si desidera eseguirlo come job, come nell'esempio Dockerfile
riportato di seguito.
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
Di seguito è riportato un file job_logs.py
di esempio:
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.")
Prima di poter eseguire il push e il pull delle immagini in e da Oracle Cloud Infrastructure Registry (noto anche come Container Registry), è necessario disporre di un token di autorizzazione per Oracle Cloud Infrastructure. La stringa del token di autenticazione viene visualizzata solo quando viene creata, quindi assicurarsi di copiare immediatamente il token di autenticazione in una posizione sicura.