Partilhar via


Introdução aos contêineres remotos do Docker no WSL 2

Este guia passo a passo ajudará você a começar a desenvolver com contêineres remotos configurando o Docker Desktop para Windows com WSL 2 (Subsistema Windows para Linux, versão 2).

O Docker Desktop para Windows fornece um ambiente de desenvolvimento para criar, enviar e executar aplicativos dockerizados. Ao habilitar o mecanismo baseado em WSL 2, você pode executar contêineres Linux e Windows no Docker Desktop na mesma máquina. (O Docker Desktop é gratuito para uso pessoal e para pequenas empresas, para obter informações sobre preços Pro, Team ou Business, consulte as Perguntas frequentes do site do Docker).

Observação

Recomendamos o uso do Docker Desktop devido à sua integração com o Windows e o Subsistema Windows para Linux. No entanto, embora o Docker Desktop suporte a execução de contêineres Linux e Windows, você não pode executar ambos simultaneamente. Para executar contêineres Linux e Windows simultaneamente, você precisaria instalar e executar uma instância separada do Docker no WSL. Se você precisar executar contêineres simultâneos ou apenas preferir instalar um mecanismo de contêiner diretamente em sua distribuição Linux, siga as instruções de instalação do Linux para esse serviço de contêiner, como Instalar o Docker Engine no Ubuntu ou Instalar o Podman para executar contêineres Linux.

Visão geral dos contêineres do Docker

O Docker é uma ferramenta usada para criar, implantar e executar aplicativos usando contêineres. Os contêineres permitem que os desenvolvedores empacotem um aplicativo com todas as partes necessárias (bibliotecas, estruturas, dependências, etc.) e enviem tudo como um pacote. O uso de um contêiner garante que o aplicativo será executado da mesma forma, independentemente de quaisquer configurações personalizadas ou bibliotecas instaladas anteriormente no computador que o executam que possam diferir da máquina usada para escrever e testar o código do aplicativo. Isso permite que os desenvolvedores se concentrem em escrever código sem se preocupar com o sistema em que o código será executado.

Os contêineres do Docker são semelhantes às máquinas virtuais, mas não criam um sistema operacional virtual inteiro. Em vez disso, o Docker permite que o aplicativo use o mesmo kernel Linux do sistema em que está sendo executado. Isso permite que o pacote do aplicativo exija apenas partes que ainda não estão no computador host, reduzindo o tamanho do pacote e melhorando o desempenho.

A disponibilidade contínua, usando contêineres do Docker com ferramentas como o Kubernetes, é outra razão para a popularidade dos contêineres. Isso permite que várias versões do contêiner do seu aplicativo sejam criadas em momentos diferentes. Em vez de precisar desativar um sistema inteiro para atualizações ou manutenção, cada contêiner (e seus microsserviços específicos) pode ser substituído imediatamente. Você pode preparar um novo contêiner com todas as suas atualizações, configurar o contêiner para produção e apenas apontar para o novo contêiner quando estiver pronto. Você também pode arquivar diferentes versões do seu aplicativo usando contêineres e mantê-los em execução como um fallback de segurança, se necessário.

Para saber mais, confira Introdução aos contêineres do Docker.

Pré-requisitos

Para obter mais informações, consulte os documentos do Docker Requisitos do sistema para instalar o Docker Desktop no Windows.

Para saber como instalar o Docker no Windows Server, consulte Introdução: preparar o Windows para contêineres.

Observação

A WSL pode executar distribuições no modo WSL versão 1 ou WSL 2. Você pode verificar isso abrindo o PowerShell e digitando: wsl -l -v. Certifique-se de que a sua distribuição está definida para usar WSL 2 digitando: wsl --set-version <distro> 2. Substitua <distro> pelo nome da distro (por exemplo, Ubuntu 18.04).

Na WSL versão 1, devido a diferenças fundamentais entre Windows e Linux, o Docker Engine não podia ser executado diretamente dentro do WSL, então a equipe do Docker desenvolveu uma solução alternativa usando Hyper-V VMs e LinuxKit. No entanto, como o WSL 2 agora é executado em um kernel Linux com capacidade total de chamada do sistema, o Docker pode ser executado totalmente no WSL 2. Isso significa que os contêineres Linux podem ser executados nativamente sem emulação, resultando em melhor desempenho e interoperabilidade entre suas ferramentas Windows e Linux.

Instalar o Docker Desktop

Com o back-end WSL 2 suportado no Docker Desktop para Windows, você pode trabalhar em um ambiente de desenvolvimento baseado em Linux e criar contêineres baseados em Linux, enquanto usa o Visual Studio Code para edição e depuração de código e executa seu contêiner no navegador Microsoft Edge no Windows.

Para instalar o Docker (depois de já instalar o WSL):

  1. Faça o download do Docker Desktop e siga as instruções de instalação.

  2. Uma vez instalado, inicie o Docker Desktop no menu Iniciar do Windows e, em seguida, selecione o ícone do Docker no menu de ícones ocultos da barra de tarefas. Clique com o botão direito do mouse no ícone para exibir o menu de comandos do Docker e selecione "Configurações". Ícone do painel do Docker Desktop

  3. Verifique se a opção "Usar o mecanismo baseado no WSL 2" está marcada em Configurações>gerais. Configurações gerais do Docker Desktop

  4. Selecione entre as distribuições WSL 2 instaladas nas quais você deseja habilitar a integração do Docker acessando: Configurações>Recursos>Integração WSL. Configurações de recursos do Docker Desktop

  5. Para confirmar que o Docker foi instalado, abra uma distribuição WSL (por exemplo, Ubuntu) e exiba a versão e o número de compilação digitando: docker --version

  6. Teste se a instalação funciona corretamente executando uma imagem integrada simples do Docker usando: docker run hello-world

Sugestão

Aqui estão alguns comandos úteis do Docker para saber:

  • Liste os comandos disponíveis na CLI do Docker digitando: docker
  • Listar informações para um comando específico com: docker <COMMAND> --help
  • Liste as imagens do Docker na sua máquina (que é apenas a imagem hello-world neste momento), com: docker image ls --all
  • Liste os contêineres em sua máquina, com: docker container ls --all ou docker ps -a (sem a -a mostrar todos os sinalizadores, apenas os contêineres em execução serão exibidos)
  • Liste informações de todo o sistema sobre a instalação do Docker, incluindo estatísticas e recursos (CPU & memória) disponíveis para você no contexto WSL 2, com: docker info

Desenvolver em contêineres remotos usando VS Code

Para começar a desenvolver aplicativos usando o Docker com WSL 2, recomendamos o uso do VS Code, juntamente com as extensões WSL, Dev Containers e Docker.

  • Instale a extensão VS Code WSL. Esta extensão permite que você abra seu projeto Linux em execução no WSL no VS Code (não precisa se preocupar com problemas de caminho, compatibilidade binária ou outros desafios entre sistemas operacionais).

  • Instale a extensão VS Code Dev Containers. Essa extensão permite que você abra sua pasta de projeto ou repositório dentro de um contêiner, aproveitando o conjunto completo de recursos do Visual Studio Code para fazer seu trabalho de desenvolvimento dentro do contêiner.

  • Instale a extensão VS Code Docker. Essa extensão adiciona a funcionalidade de criar, gerenciar e implantar aplicativos em contêineres de dentro do VS Code. (Você precisa da extensão Dev Containers para realmente usar o contêiner como seu ambiente de desenvolvimento.)

Vamos usar o Docker para criar um contêiner de desenvolvimento para um projeto de aplicativo existente.

  1. Para este exemplo, usarei o código-fonte do meu tutorial Hello World para Django no ambiente de desenvolvimento Python configurado docs. Você pode pular esta etapa se preferir usar seu próprio código-fonte do projeto. Para baixar meu aplicativo web HelloWorld-Django do GitHub, abra um terminal WSL (Ubuntu, por exemplo) e digite: git clone https://github.com/mattwojo/helloworld-django.git

    Observação

    Sempre armazene seu código no mesmo sistema de arquivos em que você está usando ferramentas. Isso resultará em um desempenho de acesso a arquivos mais rápido. Neste exemplo, estamos usando uma distro Linux (Ubuntu) e queremos armazenar nossos arquivos de projeto no sistema \\wsl\de arquivos WSL. Armazenar arquivos de projeto no sistema de arquivos do Windows tornaria as coisas significativamente mais lentas ao usar ferramentas Linux no WSL para acessar esses arquivos.

  2. A partir do seu terminal WSL, altere os diretórios para a pasta de código-fonte deste projeto:

    cd helloworld-django
    
  3. Abra o projeto no VS Code em execução no servidor de extensão WSL local inserindo:

    code .
    

    Confirme se você está conectado à sua distro WSL Linux verificando o indicador remoto verde no canto inferior esquerdo da sua instância do VS Code.

    VS Code WSL indicador remoto

  4. Na paleta de comandos VS Code (Ctrl + Shift + P), digite: Dev Containers: Reopen in Container pois estamos usando uma pasta já aberta usando a extensão WSL. Como alternativa, use Dev Containers: Open Folder in Container... para escolher uma pasta WSL usando a partilha local \\wsl$ (do lado do Windows). Consulte o Visual Studio Code Início rápido: Abra uma pasta existente em um contentor para obter mais detalhes. Se esses comandos não forem exibidos quando você começar a digitar, verifique se você instalou a extensão Dev Containers vinculada acima.

    Comando VS Code Dev Containers

  5. Selecione a pasta do projeto que você deseja contentorizar. No meu caso, isto é \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    Pasta VS Code Dev Containers

  6. Uma lista de definições de contêiner será exibida, pois ainda não há nenhuma configuração de contêiner de desenvolvimento na pasta do projeto (repo). A lista de definições de configuração de contêiner que aparece é filtrada com base no seu tipo de projeto. Para o meu projeto Django, selecionarei Python 3.

    Definições de configuração do VS Code Dev Containers

  7. Uma nova instância do VS Code será aberta, começará a criar nossa nova imagem e, assim que a compilação for concluída, iniciará nosso contêiner. Você verá que um novo .devcontainer diretório apareceu com informações de configuração de contêiner dentro dos arquivos Dockerfile e devcontainer.json.

    Pasta .devcontainer do VS Code

  8. Para confirmar que seu projeto ainda está conectado ao WSL e dentro de um contêiner, abra o terminal integrado do VS Code (Ctrl + Shift + ~). Verifique o sistema operacional digitando: uname e a versão Python com: python3 --version. Você pode ver que o uname voltou como "Linux", então você ainda está conectado ao mecanismo WSL 2, e o número da versão do Python será baseado na configuração do contêiner que pode diferir da versão do Python instalada na sua distribuição WSL.

  9. Para executar e depurar seu aplicativo dentro do contêiner usando o Visual Studio Code, primeiro abra o menu Executar (Ctrl+Shift+D ou selecione a guia na barra de menus mais à esquerda). Em seguida, selecione Executar e Depurar para selecionar uma configuração de depuração e escolha a configuração que melhor se adapta ao seu projeto (no meu exemplo, isso será "Django"). Isso criará um launch.json arquivo na .vscode pasta do seu projeto com instruções sobre como executar seu aplicativo.

    Configuração de execução de depuração no VS Code

  10. De dentro do VS Code, selecione Executar>Iniciar depuração (ou simplesmente pressione a tecla F5). Isso abrirá um terminal dentro do VS Code e você verá um resultado dizendo algo como: "Iniciando o servidor de desenvolvimento em http://127.0.0.1:8000/ Feche o servidor com CONTROL-C." Mantenha pressionada a tecla Control e selecione o endereço exibido para abrir seu aplicativo no navegador da Web padrão e ver seu projeto em execução dentro de seu contêiner.

    VS Code executando um contêiner docker

Agora você configurou com sucesso um contêiner de desenvolvimento remoto usando o Docker Desktop, alimentado pelo back-end WSL 2, que você pode codificar, compilar, executar, implantar ou depurar usando o VS Code!

Solução de problemas

Contexto do Docker no WSL descontinuado.

Se estivesse a usar uma primeira prévia técnica do Docker para WSL, pode ter um contexto do Docker chamado "wsl" que agora está obsoleto e não é mais utilizado. Você pode verificar com o comando: docker context ls. Você pode remover esse contexto "wsl" para evitar erros com o comando: docker context rm wsl como você deseja usar o contexto padrão para Windows e WSL2.

Os possíveis erros que você pode encontrar com esse contexto wsl preterido incluem: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. ou error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.

Para obter mais informações sobre esse problema, consulte Como configurar o Docker no Sistema Windows para Linux (WSL2) no Windows 10.

Problemas para encontrar a pasta de armazenamento de imagens do docker

O Docker cria duas pastas de distribuição para armazenar dados:

  • \wsl$\docker-desktop
  • \wsl$\docker-desktop-data

Você pode encontrar essas pastas abrindo sua distribuição WSL Linux e digitando: explorer.exe . para visualizar a pasta no Explorador de Arquivos do Windows. Digite: \\wsl\<distro name>\mnt\wsl substituindo <distro name> pelo nome da sua distribuição (ou seja, Ubuntu-20.04) para ver essas pastas.

Saiba mais sobre como localizar locais de armazenamento do docker na WSL, consulte esse problema no repositório WSL ou nesta postagem do StackOverflow.

Para obter mais ajuda com a solução de problemas gerais no WSL, consulte o documento Solução de problemas .

Recursos adicionais