As imagens personalizadas do MaxCompute permitem empacotar dependências de terceiros em imagens docker para uso em jobs SQL e Python (PyODPS ou MaxFrame).
Contexto
O desenvolvimento em SQL e Python no MaxCompute frequentemente depende de diversos pacotes de terceiros. O recurso de gerenciamento de imagens personalizadas permite usar imagens docker para criar ambientes de desenvolvimento completos para seus jobs MaxCompute SQL e Python (PyODPS ou MaxFrame).
Pré-requisitos
Tamanho da imagem: O tamanho máximo de uma única imagem personalizada no MaxCompute é de 10 GB.
Quantidade de imagens: Cada tenant do MaxCompute pode enviar até 10 imagens.
Requisitos de versão do ACR: Apenas instâncias Standard Edition e Premium Edition do ACR Enterprise Edition são suportadas.
Requisito de arquitetura de CPU: Construa suas imagens em uma arquitetura de CPU x86_64. Arquiteturas não x86_64, como chips da série M do macOS e ARM, não são suportadas.
Requisitos de versão de biblioteca: O ambiente de execução de jobs do MaxCompute é comparável ao CentOS 7. Ao construir uma imagem, utilize versões de pacotes compatíveis com o CentOS 7. O source do yum na imagem base vem pré-configurado para usar o source de imagem CentOS 7 da Alibaba Cloud.
-
Restrições de diretório:
Ao usar ferramentas como pip ou yum para instalar pacotes, não coloque arquivos pessoais nos diretórios
/home/admin, /usr/local/lib, /usr/ali, /apsara. Quando um contêiner é iniciado, o MaxCompute monta seu ambiente de execução nesses diretórios e sobrescreve o conteúdo original.
Procedimento
Etapa 1: Instalar o docker
Linux: Instale o docker seguindo a documentação oficial do docker.
-
macOS ou Windows:
Desenvolvedores individuais: Use o docker Desktop.
Usuários corporativos sem licença do docker Desktop: Recomendamos o Rancher Desktop, que é open-source.
Etapa 2: Conceder permissões
Conceda à conta ou ao usuário a permissão de leitura para funções do RAM, **permissões operacionais para ACR e permissões operacionais para imagens personalizadas do MaxCompute**, conforme descrito na tabela a seguir.
|
Caso de uso |
Tipo de conta |
Permissões |
Referência |
|
Permissão de leitura para funções do RAM |
Conta Alibaba Cloud (recomendado) |
Por padrão, uma conta Alibaba Cloud possui permissão de leitura para funções do RAM. Nenhuma autorização é necessária. |
N/A |
|
Usuário RAM |
Conceda a permissão AliyunRAMReadOnlyAccess. |
||
|
Permissões operacionais do ACR |
Conta Alibaba Cloud (recomendado) |
Por padrão, uma conta Alibaba Cloud possui todas as permissões para o ACR. Nenhuma autorização é necessária. |
N/A |
|
Usuário RAM |
Um usuário RAM requer a permissão AliyunContainerRegistryReadOnlyAccess para operar o ACR. |
||
|
Permissões operacionais de imagens personalizadas do MaxCompute |
Conta Alibaba Cloud (recomendado) |
Por padrão, uma conta Alibaba Cloud possui permissões totais para gerenciar imagens personalizadas no MaxCompute. Nenhuma autorização é necessária. |
N/A |
|
Usuário RAM |
Para que um usuário RAM gerencie imagens personalizadas do MaxCompute, conceda as permissões necessárias com base nos seus requisitos de negócios. |
Etapa 3: Construir uma imagem personalizada
Construa uma imagem personalizada usando um Dockerfile baseado em uma imagem base do MaxCompute.
A URL da imagem base CentOS do MaxCompute é
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest. Essa imagem base fornece um ambiente básico que inclui Python 3.7, Python 3.11, pip e yum.O endereço da imagem base Ubuntu do MaxCompute é
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest.
-
Crie um Dockerfile baseado em uma imagem base do MaxCompute. Execute este comando:
vim DockerFile -
Adicione o seguinte conteúdo ao Dockerfile:
# Use the MaxCompute CentOS base image. FROM registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest # To use the Ubuntu image, replace the image address with registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest. # Install system dependencies. RUN yum install vi -y # Install third-party libraries. RUN /usr/ali/python3.7/bin/python3 -m pip install --no-cache-dir pandas -
Construa a imagem a partir do Dockerfile.
sudo docker build -f DockerFile -t <image_name>:<tag> .Parâmetros:
image_name: O nome da imagem personalizada.
tag: A versão da imagem personalizada.
Etapa 4: Enviar imagem para o ACR
Faça login no console do Container Registry e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, selecione Instances.
-
Na página Instances, clique em Create ACR EE. Caso já tenha criado uma instância, pule esta etapa.
ImportanteO envio de imagens personalizadas só é possível para instâncias Standard Edition ou Premium Edition do ACR Enterprise Edition.
Na página Instances, localize a instância Enterprise Edition desejada e clique em Manage para abrir a página de visão geral da instância.
-
No painel de navegação à esquerda, selecione .
Na página Repository > Repositories, clique em Create Repository. Na caixa de diálogo Create Repository, insira as informações abaixo e clique em Next.
Parâmetro
Obrigatório
Descrição
Region
Sim
A região da instância atual é preenchida automaticamente.
Namespace
Sim
Defina o namespace do repositório de imagens. Esta configuração não pode ser alterada posteriormente.
-
Recomendamos criar um namespace correspondente a uma empresa, organização ou usuário individual, como
aliyun. -
Não recomendamos criar um namespace correspondente a um módulo ou sistema, como
tomcatoucentos.
Repository Name
Sim
O nome deve ter entre 2 e 120 caracteres e pode conter letras minúsculas, números e os seguintes separadores: sublinhados (_), hífens (-), pontos (.) e barras (/). O nome não pode começar ou terminar com um separador.
Repository Type
Não
-
Public: Para fazer pull de uma imagem pública, é necessário fazer login na instância Enterprise Edition. Se desejar permitir pulls anônimos, ative a configuração de pull anônimo público para a instância.
-
Fazer pull de uma imagem privada da Enterprise Edition exige login em uma instância Enterprise Edition com permissões de pull.
-
O padrão é privado.
Tags
Não
After selected, all tags other than the latest in the repository cannot be overwritten, ensuring the consistency of the container images.
Accelerated Image
Não
After selected, all images in the repository will automatically generate the accelerated images with "_accelerated" suffix
-
Full Mode: Full mode provides a significant acceleration effect. The size of an accelerated image is approximately 130% the size of the original image. The system requires approximately 25 seconds to generate a 1 GB-sized accelerated image. If an accelerated image layer has been generated for an image layer, the system does not generate an accelerated image layer again for the image layer.
-
Index-only Mode (Public Preview): Este modo oferece cerca de 70% do efeito de aceleração do modo completo. A imagem acelerada tem aproximadamente 3% do tamanho da imagem original. Leva cerca de 3 segundos para gerar uma imagem acelerada de 1 GB. Camadas já indexadas não são reindexadas.
Summary
Sim
Max. 100 characters
Description
Não
Supports Markdown Format
-
-
Configure a origem do código:
Em Code Source, selecione Local Repository e clique em Create Repository.
Para mais informações, consulte Use an Enterprise Edition instance to build images.
-
Envie a imagem personalizada para uma instância do ACR na mesma conta.
Na página Repository Repositories, clique em Manage na coluna Actions do repositório alvo.
-
No painel de navegação à esquerda, selecione Details.
Siga as instruções em Instructions on Images na parte inferior da página Details para enviar uma imagem personalizada do seu ambiente docker para o repositório de imagens do Container Registry.
-
(Opcional) Se sua máquina estiver em uma VPC, execute as etapas a seguir:
Configure o controle de acesso para a VPC se conectar à instância Enterprise Edition. Para mais informações, consulte Configure access over a VPC.
-
Ao trabalhar com uma instância do ACR Enterprise Edition em um ambiente docker, adicione vpc ao nome de domínio. Por exemplo, altere
acr-test-registry.cn-wulanchabu.cr.aliyuncs.comparaacr-test-registry-vpc.cn-wulanchabu.cr.aliyuncs.com.$ docker login --username=***@test.aliyunid.com acr-test-registry.cn-wulanchabu.cr.aliyuncs.com
NotaSe ocorrer um erro ao fazer login na instância, verifique se o acesso à rede pública está ativado para o repositório.
Etapa 5: Adicionar imagem ao MaxCompute
Associe uma imagem existente do ACR ao MaxCompute para gerenciar centralmente suas imagens de desenvolvimento.
Faça login no console do MaxCompute e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Na página Images, clique na aba Custom Image.
-
Na aba Custom Image, clique em Create Image. Na caixa de diálogo Add Image, configure os seguintes parâmetros:
NotaAo criar uma imagem pela primeira vez, a caixa de diálogo MaxCompute Service-linked Role aparece. Clique em OK. O sistema cria automaticamente uma função vinculada ao service para acessar recursos do ACR.
Parâmetro
Descrição
Image Name
Obrigatório. O nome da imagem personalizada. The image name must start with a lowercase letter, and can contain only lowercase letters, digits, hyphens (-), and underscores (_).
Este nome é usado para referenciar a imagem no MaxCompute SQL, PyODPS e MaxFrame.
Image Type
Obrigatório. O tipo da imagem do ACR. Apenas imagens do ACR Enterprise Edition são suportadas.
Enterprise Edition Image Instance
Obrigatório. Selecione a instância Enterprise Edition criada no ACR.
Image Namespace
Obrigatório. Selecione o namespace de imagem criado no ACR.
Image Repository
Obrigatório. Selecione o repositório de imagens criado no ACR.
Image Version
Obrigatório. Selecione a versão da imagem enviada ao ACR.
Image Description
Obrigatório. Adicione uma descrição para a imagem.
Clique em OK. A nova imagem personalizada aparecerá na lista de imagens personalizadas.
Etapa 6: Usar a imagem
É possível referenciar imagens personalizadas em UDFs SQL do MaxCompute, PyODPS e MaxFrame.
Cada job pode especificar apenas uma imagem. Especificar mais de uma pode causar conflitos de imagem.
-
Para UDFs, use flags no nível de sessão para especificar a imagem e a versão do Python. Exemplo:
set odps.sql.python.version=cp37; set odps.session.image = <image_name>; -
Para PyODPS, use o parâmetro
imagedos métodosexecuteoupersistpara especificar a imagem. Exemplo:NotaPara referenciar uma imagem no PyODPS, atualize o PyODPS para a versão V0.11.5 ou posterior.
image='<image_name>' -
Para MaxFrame, use a seguinte configuração para especificar a imagem do job:
config.options.sql.settings = { "odps.session.image": "<image_name>" }