Se as imagens oficiais do EAS não atenderem aos seus requisitos, use uma imagem personalizada para empacotar um ambiente de execução completo.
Planejamento do registro de imagens
O EAS baixa imagens de um registro ao implantar serviços. Armazene suas imagens no Container Registry ACR e use o endereço VPC para garantir melhor desempenho e segurança.
Baixar imagens pela internet pública gera riscos de segurança e é significativamente mais lento. Não use acesso pela internet pública para baixar imagens.
ACR Personal Edition
Gratuito, mas disponível apenas em uma única região. Baixar imagens entre regiões exige um endereço de internet pública.
Use o ACR Personal Edition apenas para testes e certifique-se de que ele esteja na mesma região do serviço EAS.
ACR Enterprise Edition
Oferece segurança reforçada, alto desempenho e sincronização global. Os serviços EAS podem baixar imagens com segurança e alta velocidade pela rede privada, tanto na mesma região quanto entre regiões diferentes.
Use o ACR Enterprise Edition em ambientes de produção.
Registro de imagens auto-hospedado
Se você usar um registro auto-hospedado, como o Harbor, em uma VPC da Alibaba Cloud, o endereço do registro será acessível apenas dentro dessa VPC. Assim como no ACR Enterprise Edition, configure a VPC do serviço EAS para que o registro e o serviço estejam na mesma VPC.
Autenticação no registro de imagens
Para registros privados que exigem autenticação, forneça as credenciais ao implantar o serviço.
No arquivo de configuração JSON, use o parâmetro dockerAuth para especificar as credenciais de autenticação. O valor deve ser a forma codificada em Base64 de username:password.
Por exemplo, para abcd:abcde12345, execute echo -n "abcd:abcde12345" | base64 para obter YWJjZDphYmNkZTEy****, valor a ser usado em dockerAuth.
{"dockerAuth": "YWJjZDphYmNkZTEy****"}
Ao usar um registro de imagens ACR sob a mesma conta Alibaba Cloud e na mesma região, o EAS permite baixar imagens sem credenciais — não é necessário nome de usuário ou senha.
Início rápido: crie e implante uma imagem personalizada
Esta seção demonstra como criar uma imagem de serviço web com Gunicorn e Flask em uma instância ECS da Alibaba Cloud, enviá-la para o ACR e implantá-la como um serviço online no EAS.
Etapa 1: Prepare o ambiente
Antes de começar, verifique se os seguintes recursos estão prontos:
Virtual Private Cloud (VPC): Serviços EAS, instâncias ECS e o ACR se comunicam por meio de uma VPC para garantir operações estáveis e seguras de envio e download de imagens.
Container Registry (ACR): Armazena e gerencia suas imagens personalizadas. Consulte Enviar e obter imagens para configurar uma instância do ACR Enterprise Edition com os namespaces e repositórios necessários.
-
Ambiente de desenvolvimento: Crie uma instância ECS com a seguinte configuração para compilar sua imagem:
Tipo de instância: ecs.u1-c1m2.large
Imagem: Alibaba Cloud Linux 3.2104 LTS 64 bits
Extensão: Docker Community Edition
Rede: Adicione a VPC às configurações de controle de acesso da instância do ACR Enterprise Edition; caso contrário, o envio de imagens para o ACR falhará. Para mais detalhes, consulte Configurar controle de acesso VPC para o ACR.
NotaVocê também pode usar um ambiente de desenvolvimento local ou outro ambiente.
Ambiente de desenvolvimento local: Instale e execute o Docker para compilar imagens.
Ambiente de desenvolvimento DSW: Na coluna Actions da instância DSW, clique em Create Image. O sistema compila uma imagem Docker e a salva no ACR. Durante a implantação, selecione Custom Image para escolher a imagem em uma lista suspensa. Para mais detalhes, consulte Criar uma imagem de instância DSW.
Etapa 2: Prepare os arquivos da aplicação
Crie uma pasta de projeto (por exemplo, my-app) com os seguintes arquivos:
-
requirements.txt (dependências da aplicação)
flask gunicorn -
app.py (código da aplicação web)
from flask import Flask app = Flask(__name__) @app.route('/hello/model') def hello_world(): # Add your model inference or business logic here return 'Hello World from Gunicorn!' # Note: No app.run() needed — Gunicorn starts the app
-
Dockerfile (instruções de compilação da imagem)
# 1. Use a lightweight official Python image as the base FROM python:3.9-slim # 2. Set the working directory WORKDIR /app # 3. Copy and install dependencies first to leverage Docker's layer cache COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 4. Copy application code COPY app.py . # 5. Declare the service port EXPOSE 8000 # 6. Define the default container startup command (can be overridden by the EAS "Run command" setting) CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]
Etapa 3: Compile e envie a imagem
Abra um terminal e acesse a pasta do projeto (
my-app).-
Faça login na instância do ACR. Substitua os espaços reservados no comando pelos valores reais.
# Example: docker login --username=your_user my-registry.cn-hangzhou.aliyuncs.com docker login --username=<username> <ACR registry domain> -
Compile a imagem com a tag completa.
# Example: docker build -t my-registry.cn-hangzhou.aliyuncs.com/my-namespace/flask-app:v1 . docker build -t <ACR registry domain>/<namespace>/<repository name>:<tag> . -
(Recomendado) Verifique a imagem localmente antes de enviar. Execute o comando abaixo para confirmar se a imagem inicia corretamente antes de enviá-la ao ACR, evitando imagens corrompidas no registro.
# Replace <port> with the port declared in your Dockerfile's EXPOSE instruction (8000 in this example) docker run -p <port>:<port> <ACR registry domain>/<namespace>/<repository name>:<tag>Se a aplicação responder normalmente, a imagem está pronta para envio.
-
Envie a imagem para o ACR.
# Example: docker push registry.cn-hangzhou.aliyuncs.com/my-namespace/flask-app:v1 docker push <ACR registry domain>/<namespace>/<repository name>:<tag>
Etapa 4: Implante o serviço
Faça login no PAI console. Selecione uma região no topo da página. Em seguida, escolha o workspace desejado e clique em Elastic Algorithm Service (EAS).
Clique em Deploy Service, selecione .
-
Configure os seguintes parâmetros principais:
Deployment Method: Selecione Image-based Deployment.
-
Image Configuration: Selecione Image Address, depois insira o endereço completo da imagem obtido na etapa anterior.
Como este exemplo usa o ACR sob a mesma conta Alibaba Cloud, o EAS pode baixar a imagem sem credenciais.
-
Command to Run:
gunicorn -w 4 -b 0.0.0.0:8000 app:appComo funciona : O comando de execução inserido no console EAS substitui a instrução
CMDdo Dockerfile. Definir o comando de inicialização aqui facilita a depuração e atualizações futuras. Port Number: 8000.
Deployment: Recursos de CPU são suficientes para este exemplo. Em Public Resources, selecione
ecs.c6.large.-
VPC: Selecione uma VPC, vSwitch e grupo de segurança.
Certifique-se de que a VPC selecionada foi adicionada às configurações de controle de acesso da instância do ACR. Caso contrário, o download de imagens falhará devido a problemas de conectividade de rede (um erro comum é
ImagePullBackOff).
Clique em Deploy. Quando o status do serviço mudar para Running, a implantação estará concluída.
Atualização do endereço da imagem ou configuração do serviço: A configuração JSON na página de detalhes do serviço é somente leitura. Para fazer alterações, use a opção Update na lista de serviços.
Etapa 5: Teste o serviço
Após a implantação do serviço, obtenha o endereço do endpoint e o token, e execute o comando abaixo para testar o serviço Flask:
# Replace <endpoint> and <token> with the actual service endpoint and token
curl <endpoint>/hello/model -H "Authorization: <token>"
Se a resposta for Hello World from Gunicorn!, o serviço foi implantado e está acessível.
Para mais informações sobre como chamar serviços, consulte Métodos de invocação de serviço.
Conceitos principais e limitações
-
Rede: Os serviços EAS acessam recursos de rede privada por meio de endereços VPC, o que geralmente exige configuração de VPC. Para acessar recursos da internet pública — como instalar dependências de fontes públicas com
pip, chamar APIs externas ou baixar imagens pela internet — configure um gateway NAT para a VPC. Para mais detalhes, consulte Acesso do EAS a recursos públicos e privados.Nota sobre custos : O gateway NAT é um serviço pago e gera cobranças adicionais.
-
Portas:
O mecanismo de serviço EAS reserva as portas
8080e9090. Não use essas portas em sua aplicação, pois o serviço falhará ao iniciar devido a conflitos de porta.Quando um serviço inclui vários contêineres, cada contêiner deve escutar em uma porta diferente. Por exemplo, se o contêiner principal usa a porta
8000, o contêiner sidecar não pode usar também a porta8000, caso contrário o serviço falhará ao iniciar devido a conflitos de porta.
Versão do CUDA: A versão do CUDA para um serviço online é determinada pelo tipo de instância e pela imagem base selecionados, e não pode ser alterada enquanto o serviço está em execução. Para mudar a versão do CUDA, reimplemente o serviço e selecione uma imagem ou tipo de instância compatível com a versão desejada.
Injeção de sidecar: Para autenticação, autorização e monitoramento, o EAS injeta um contêiner proxy na instância de serviço no modo sidecar. Esse proxy é transparente para sua aplicação, mas consome uma pequena quantidade de recursos. Ele roteia solicitações externas com segurança para a porta de serviço configurada.
Suporte a protocolos de API: Implantações baseadas em imagem suportam HTTP, WebSocket e gRPC (HTTP/2) para serviços de API executados dentro do contêiner.
Aplicação em produção
Separe a imagem do modelo: Mantenha os arquivos de código e de modelo separados. Empacote o código na imagem, armazene os arquivos de modelo no Object Storage (OSS) ou Network-Attached Storage (NAS), e monte-os no contêiner durante a implantação usando o recurso Montagens de armazenamento na página de implantação do EAS. Isso reduz o tempo de download de imagens durante atualizações de serviço e operações de scale-out.
Baixe imagens pela rede privada: Configure uma VPC para seu serviço para que ele possa baixar imagens do ACR usando o endereço VPC, garantindo segurança e desempenho.
Pré-instale dependências para reduzir o tempo de cold start: Se seu serviço precisa baixar pacotes Python ou arquivos de modelos grandes a cada reinicialização, os tempos de cold start aumentam significativamente. Inclua o ambiente Python, pacotes (como PyTorch e Transformers) e arquivos de modelo diretamente na imagem para que o contêiner possa atender solicitações imediatamente após a inicialização, sem precisar baixar nada em tempo de execução.
Registre imagens como ativos de IA: Se uma imagem personalizada se aplica a vários cenários, use o recurso de imagens do PAI AI Assets para registrá-la e gerenciá-la centralizadamente.
Configure verificações de integridade: Defina verificações de integridade para seu serviço para que o EAS reinicie automaticamente instâncias não saudáveis e mantenha a estabilidade do serviço. Para mais detalhes, consulte Configurar verificações de integridade.
Ative o dimensionamento automático: Quando a carga de tráfego oscilar significativamente, ative o Dimensionamento automático horizontal para lidar com mudanças de tráfego de forma elástica e econômica.
Perguntas frequentes
P: Falha no download de imagem com ImagePullBackOff
Siga esta ordem para solucionar o problema:
Endereço da imagem: Verifique se o endereço da imagem, namespace e tag estão corretos, e se a imagem foi enviada com sucesso para o registro.
Espaço em disco do sistema: Se você encontrar o erro
no space left on device, expanda o disco do sistema.-
Conectividade de rede:
Uso de endereço de imagem de internet pública: Confirme se a VPC do EAS tem acesso à internet pública e se o acesso público está ativado para o ACR. Observe que o download entre regiões pela internet pública é lento e suscetível a falhas de rede.
Uso de endereço de imagem de rede privada: O download entre regiões pela rede privada exige o ACR Enterprise Edition e conectividade VPC entre as regiões. Para mais detalhes, consulte Acessar instâncias do ACR Enterprise Edition entre regiões ou a partir de IDC.
Controle de acesso do ACR: Com base no tipo de endereço de imagem usado, verifique se o Controle de acesso à internet ou o Controle de acesso VPC está configurado para o ACR.
Credenciais do registro: Se estiver usando um registro privado que exige autenticação (não sendo o ACR sob sua própria conta), verifique se as credenciais na configuração de imagem estão corretas.
P: Como uso uma imagem do ACR entre regiões?
Por padrão, o EAS pode baixar imagens de repositórios do ACR na mesma região pela rede privada VPC. Se a instância do ACR e o serviço EAS estiverem em regiões diferentes, o acesso pela rede privada não estará disponível. Use uma das seguintes abordagens:
Opção 1 (recomendada): Crie uma nova instância do ACR na mesma região do serviço EAS e envie a imagem para esse repositório regional antes de implantar. Isso evita problemas entre regiões.
Opção 2: Conecte as VPCs de ambas as regiões usando a Cloud Enterprise Network (CEN) para habilitar o download pela rede privada entre regiões. Para mais detalhes, consulte Acessar uma instância Enterprise Edition entre regiões ou a partir de um data center.
Opção 3 (apenas para testes): Baixe imagens por um endereço de internet pública. Certifique-se de que o acesso público esteja ativado para o ACR e que a VPC do serviço EAS tenha um gateway NAT para acesso à internet. Esta opção é lenta e apresenta riscos de segurança — use-a apenas para testes.
P: O que significa "no match for platform in manifest" ao implantar uma imagem personalizada?
Esse erro indica que a arquitetura da imagem (por exemplo, arm64) não corresponde ao ambiente de execução da instância EAS (geralmente amd64/x86_64). Isso ocorre frequentemente ao compilar uma imagem em um Mac com Apple Silicon (ARM) e implantá-la em uma instância EAS (amd64). Para resolver:
Confirme a arquitetura de CPU da instância EAS de destino (a maioria das instâncias EAS usa
amd64).-
Recompile a imagem localmente para corresponder à arquitetura da instância EAS:
# Build an amd64 image (compatible with most EAS instances) docker build --platform linux/amd64 -t <ACR registry domain>/<namespace>/<repository name>:<tag> . Envie a nova imagem para o ACR e reimplemente o serviço.
P: O ACK pode se conectar ao registro de imagens dedicado do EAS (imagens oficiais do PAI)?
Não. O registro de imagens dedicado do EAS não suporta conexões diretas do ACK.
Para mais problemas, consulte Perguntas frequentes do EAS.