Traga Seu Próprio Contêiner
Você pode criar e usar um contêiner personalizado (Bring Your Own Container ou BYOC) ao criar um job e execuções de jobs.
O tamanho máximo de uma imagem de contêiner que você pode usar com jobs é de 25 GB. O tamanho da imagem do contêiner diminui o tempo de provisionamento do job por causa da extração do contêiner do Container Registry. Recomendamos que você use as menores imagens de contêiner possíveis.
Dockerfile
e uma imagem. Você começa com um Dockerfile
, que usa a imagem slim do Python. O Dockerfile
foi projetado para que você possa criar builds locais e remotos. Você usa o build local ao testar localmente o código. Durante o desenvolvimento local, você não precisa criar uma nova imagem para cada alteração de código. Não armazene arquivos no diretório
/home/datascience
. Quando o contêiner é provisionado e executado como uma execução de job, ele é substituído quando está nesse diretório.Use a opção remota para executar o Dockerfile
quando achar que o código está completo e quiser executá-lo como job, como neste exemplo 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
Veja a seguir um exemplo de arquivo 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.")
Para poder enviar e extrair imagens de/ para o Oracle Cloud Infrastructure Registry (também conhecido como Registro de Contêiner), você deve ter um token de autorização do Oracle Cloud Infrastructure. Você só vê a string do token de autenticação quando a cria, portanto, copie o token de autenticação para um local seguro imediatamente.