Bring Your Own Container
Sie können einen benutzerdefinierten Container (Bring Your Own Container oder BYOC) für die Erstellung von Jobs und Jobläufen erstellen und verwenden.
Die maximale Größe eines Containerimages, das Sie mit Jobs verwenden können, beträgt 25 GB. Die Größe des Containerimages verlangsamt die Provisioning-Zeit für den Job, da der Container aus der Container Registry abgerufen wird. Wir empfehlen Ihnen, möglichst kleinste Containerbilder zu verwenden.
Dockerfile
und ein Image erstellen. Sie beginnen mit einer Dockerfile
, die das Python-Slimimage verwendet. Die Dockerfile
ist so konzipiert, dass Sie lokale und Remote-Builds durchführen können. Sie verwenden den lokalen Build für lokale Tests mit dem Code. Bei der lokalen Entwicklung müssen Sie kein neues Image für jede Codeänderung erstellen. Speichern Sie keine Dateien im Verzeichnis
/home/datascience
. Wenn der Container bereitgestellt wird und als Joblauf ausgeführt wird, werden sie in diesem Verzeichnis überschrieben.Verwenden Sie die Remoteoption, um die Dockerfile
auszuführen, wenn der Code abgeschlossen ist und Sie ihn als Job ausführen möchten, wie in diesem Dockerfile
-Beispiel:
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
Im Folgenden finden Sie eine Beispieldatei 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.")
Bevor Sie Images an Oracle Cloud Infrastructure Registry (auch als Container Registry bezeichnet) übergeben und von dort abrufen können, benötigen Sie ein Oracle Cloud Infrastructure-Autorisierungstoken. Die Zeichenfolge des Authentisierungstokens wird nur bei der Erstellung angezeigt. Kopieren Sie das Authentifizierungstoken daher sofort an einen sicheren Speicherort.