Execute comandos do Docker no contêiner principal de uma instância do DSW para iniciar e gerenciar contêineres secundários, também conhecidos como subcontêineres.
Para iniciar subcontêineres com interface gráfica, consulte Manage Sub-containers with DockerBoard.
Limitações
Subcontêineres são suportados apenas em instâncias do DSW criadas com grupos de recursos Lingjun ou grupos de recursos de uso geral.
Não é possível modificar a configuração do Docker Daemon (
/etc/docker/daemon.json) dos contêineres secundários em uma instância do DSW. Portanto, não é possível personalizar itens de configuração comodata-rooteregistry-mirrors.Ao reiniciar uma instância do DSW, os dados de runtime dos contêineres secundários, incluindo as imagens de runtime criadas, são perdidos. Isso ocorre independentemente da ativação do recurso de disco em nuvem. Para evitar perda de dados, salve regularmente seus ambientes e dados importantes.
Ao iniciar um contêiner secundário com o Docker, não use parâmetros que concedam privilégios elevados ou representem riscos de segurança. A tabela a seguir lista os parâmetros restritos comuns:
|
Parâmetro |
Descrição |
|
|
Concede ao contêiner quase todas as permissões do host. |
|
|
Compartilha o namespace IPC do host. |
|
|
Permite que o contêiner ignore ou modifique políticas de segurança. |
|
|
Adiciona capacidades do kernel Linux ao contêiner e expande seu escopo de permissões. |
Se você receber o erro Error response from daemon: authorization denied by plugin authZ: Permission denied ao executar docker run ou docker create para criar um contêiner secundário, significa que você usou um parâmetro restrito.
Crie e configure uma instância do DSW
Ao criar uma instância do DSW, defina os seguintes parâmetros principais. Configure os demais parâmetros conforme necessário:
Resource Type: Selecione Resource Quota.
Resource Quota: Selecione a cota de recursos Lingjun criada. Para mais informações, consulte Create a new resource group and purchase Lingjun computing resources.
Enable Multi-Container Isolation (DinD): Ative esta opção.
Clique em OK para criar a instância. Para as próximas etapas, consulte Work with secondary containers.
Trabalhe com contêineres secundários
Após criar a instância do DSW, execute comandos do Docker no contêiner principal para iniciar e gerenciar os contêineres secundários.
Inicie um contêiner secundário
Execute o comando a seguir para iniciar e acessar um contêiner secundário:
docker run -it dsw-registry.cn-hangzhou.cr.aliyuncs.com/pai/pytorch:1.8PAI-gpu-py36-cu101-ubuntu18.04 /bin/bash
Monte dispositivos em um contêiner secundário
GPUs: Use
--gpus=allpara montar todos os dispositivos GPU da instância do DSW.PPUs: Diferentemente das GPUs, os dispositivos PPU devem ser montados manualmente no contêiner secundário usando o parâmetro
--device:
docker run -it --network=host \
--device=/dev/alixpu_ppu0 \
--device=/dev/alixpu \
--device=/dev/alixpu_ctl \
your-ppu-enabled-image
A imagem de runtime do contêiner secundário deve ter os componentes necessários para a PPU pré-instalados. Caso contrário, não será possível usar a PPU.
Monte dados em um contêiner secundário
Use o Docker Bind Mount para acessar dados em um contêiner secundário. Monte os dados na instância do DSW usando Dataset Mounting ou Storage Path Mounting e, em seguida, monte-os no contêiner secundário. Volume Mount e tmpfs Mount não são suportados.
Por exemplo, se a instância do DSW tiver dados montados em /mnt/data0 e /mnt/data1, use o parâmetro -v ou --mount para vincular esses dados ao contêiner secundário:
# In this example, <path_in_dsw> can be /mnt/data0, /mnt/data1, or their subpaths.
# Other paths cannot be mounted to the secondary container for now.
# Use the -v parameter
docker run -v <path_in_dsw>:<path_in_secondary_container>[:options] {image}
# Use the --mount parameter
docker run --mount type=bind,source=<path_in_dsw>,target=<path_in_secondary_container>[,readonly] {image}
Acesse um contêiner secundário
Use o comando docker exec para iniciar um novo processo de comando em um contêiner em execução.
Por exemplo, para iniciar um shell bash em modo interativo, com entrada padrão aberta (-i) e pseudoterminal alocado (-t), execute o seguinte comando:
docker exec -it your-container /bin/bash
Atualmente, não é possível usar parâmetros que representem risco de segurança, como --privileged, para acessar um contêiner.
Você também pode usar o comando docker attach para se conectar ao terminal do processo principal de um contêiner em execução. Se você iniciou o contêiner com entrada padrão aberta (-i) e pseudoterminal alocado (-t), poderá visualizar e interagir com as entradas e saídas padrão (stdin/stdout/stderr) do contêiner:
docker attach {container_id}
O atalho de teclado padrão para sair do modo attach sem parar o contêiner é Ctrl + p seguido de Ctrl + q. Você será desconectado do terminal do contêiner, mas ele continuará em execução.
Baixe imagens
Devido a restrições de rede, não é possível baixar imagens diretamente do Docker Hub. Em vez disso, baixe imagens do Alibaba Cloud Container Registry (ACR). Se o download de uma imagem do Docker Hub falhar, consulte FAQ para detalhes sobre o erro.
Para baixar uma imagem pública do ACR, execute o seguinte comando:
docker pull dsw-registry.cn-hangzhou.cr.aliyuncs.com/pai/pytorch:1.8PAI-gpu-py36-cu101-ubuntu18.04
Para baixar uma imagem de um repositório privado, execute primeiro o comando docker login para fazer login:
docker login --username={username} registry.cn-hangzhou.aliyuncs.com
Crie uma imagem
Em uma instância do DSW, use um Dockerfile para criar uma imagem de runtime:
docker build -t test-build .
Ao especificar uma imagem base com a instrução FROM, use uma imagem do Alibaba Cloud Container Registry (ACR). Para obter instruções, consulte Pull images.
Após concluir a criação, execute o comando a seguir para visualizar a imagem:
root@dsw-330808-8445dd65f4-mhnrt:/mnt/workspace/test# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test-build latest fad7fdb5e81a About a minute ago 15.4GB
Perguntas frequentes
P: Por que os processos dos contêineres secundários não aparecem ao executar o comando ps -aux em uma instância do DSW?
O contêiner principal e os contêineres secundários em uma instância do DSW não compartilham o mesmo namespace PID. Por isso, os processos dos contêineres secundários não ficam visíveis a partir do contêiner principal.
P: Por que o download de imagens do Docker Hub falha?
Devido a restrições de rede, o download direto de imagens do Docker Hub falha. Você receberá o seguinte erro:
root@dsw-381955:/mnt/workspace# docker run --network=host -it ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded.
See 'docker run --help'.
Como alternativa, baixe imagens do Artifact Center do Alibaba Cloud Container Registry (ACR). Para obter instruções, consulte Pull images. Ou então, consulte Cross-domain pull of overseas models or container images.
P: O que fazer ao receber o erro "Error response from daemon: authorization denied by plugin authZ: Permission denied"?
Isso indica o uso de um comando ou parâmetro do Docker não suportado. Em caso de dúvidas, abra um ticket para entrar em contato com o suporte técnico.
P: O que fazer ao receber o erro "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"
Verifique se o arquivo /var/docker/proxy/docker-proxy.sock existe na instância do DSW. Caso exista, execute o seguinte comando:
export DOCKER_HOST=unix:///var/docker/proxy/docker-proxy.sock
Em seguida, execute novamente o comando do Docker.