Use o VS Code para desenvolver em contêineres
Crie consistência para evitar problemas quando houver vários desenvolvedores trabalhando no mesmo projeto.
Inconsistências de codificação e teste são um risco quando você tem vários desenvolvedores com diferentes ambientes de desenvolvimento trabalhando em um projeto. O Visual Studio Code (VS Code) é um ambiente de desenvolvimento integrado (IDE) que pode ajudar a minimizar esses problemas. Ele pode ser combinado com contêineres para fornecer ambientes de desenvolvimento separados para cada aplicativo, juntamente com um ambiente de desenvolvimento consistente.
A extensão Remote - Containers do VS Code permite que você defina um contêiner, use essa definição para construir um contêiner e desenvolva dentro do contêiner. Essa definição de contêiner pode ser verificada no repositório do código-fonte junto com o código do aplicativo, o que permite que todos os desenvolvedores usem a mesma definição para construir e desenvolver dentro de um contêiner.
Por padrão, a extensão Remote - Containers usa Docker para construir e executar o contêiner, mas é fácil usar o Podman para tempos de execução de contêiner e permite o uso de contêineres sem raiz.
Este artigo orienta você na configuração para desenvolver dentro de um contêiner sem raiz usando Podman com VS Code e a extensão Remote - Containers.
Configuração inicial
Antes de continuar, certifique-se de que sua estação de trabalho Red Hat Enterprise Linux (RHEL) ou Fedora esteja atualizada com a errata mais recente e que o VS Code e a extensão Remote - Containers estejam instalados. (Consulte o site do VS Code para obter mais informações sobre a instalação.)
Em seguida, instale o Podman e seus pacotes de suporte com um simples comando dnf install
:
$ sudo dnf install -y podman
Depois de instalar o Podman, configure o VS Code para usar o executável Podman (em vez do Docker) para interagir com o contêiner. No VS Code, navegue até Arquivo > Preferências > Configurações e clique no ícone > ao lado de Extensões. No menu suspenso que aparece, selecione Remoto - Contêineres e role para baixo para encontrar a opção Remoto > Contêineres: Caminho do Docker. Na caixa de texto, substitua docker por podman.
(Brant Evans, CC BY-SA 4.0)
Agora que as configurações foram feitas, crie e abra uma nova pasta ou uma pasta existente para o projeto no VS Code.
Defina o contêiner
Este tutorial usa o exemplo de criação de um contêiner para desenvolvimento em Python 3.
A extensão Remote - Containers pode adicionar os arquivos de configuração básica necessários à pasta do projeto. Para adicionar esses arquivos, abra o Command Pallet digitando Ctrl+Shift+P no teclado, procure por Remote-Containers: Add Development Container Configuration Files e selecione-o.
(Brant Evans, CC BY-SA 4.0)
No próximo pop-up, defina o tipo de ambiente de desenvolvimento que deseja configurar. Para este exemplo de configuração, procure a definição de Python 3 e selecione-a.
(Brant Evans, CC BY-SA 4.0)
A seguir, selecione a versão do Python que será usada no contêiner. Selecione a opção 3 (padrão) para usar a versão mais recente.
(Brant Evans, CC BY-SA 4.0)
A configuração do Python também pode instalar o Node.js, mas neste exemplo, desmarque Instalar Node.js e clique em OK.
(Brant Evans, CC BY-SA 4.0)
Ele criará uma pasta .devcontainer
contendo arquivos chamados devcontainer.json
e Dockerfile
. O VS Code abre automaticamente o arquivo devcontainer.json
para que você possa personalizá-lo.
Habilitar contêineres sem root
Além dos benefícios óbvios de segurança, um dos outros motivos para executar um contêiner sem raiz é que todos os arquivos criados na pasta do projeto pertencerão ao ID de usuário (UID) correto fora do contêiner. Para executar o contêiner de desenvolvimento como um contêiner sem raiz, modifique o arquivo devcontainer.json
adicionando as seguintes linhas ao final dele:
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
"workspaceFolder": "/workspace",
"runArgs": ["--userns=keep-id"],
"containerUser": "vscode"
Essas opções dizem ao VS Code para montar o espaço de trabalho com o contexto SELinux adequado, criar um namespace de usuário que mapeie seu UID e GID para os mesmos valores dentro do contêiner e usar vscode
como seu nome de usuário dentro do contêiner. O arquivo devcontainer.json
deve ficar assim (não esqueça das vírgulas no final das linhas, conforme indicado):
(Brant Evans, CC BY-SA 4.0)
Agora que você definiu a configuração do contêiner, poderá compilar o contêiner e abrir o espaço de trabalho dentro dele. Abra novamente a paleta de comandos (com Ctrl+Shift+P) e procure por Remote-Containers: Rebuild and Reopen in Container. Clique nele e o VS Code começará a construir o contêiner. Agora é um ótimo momento para fazer uma pausa (e pegar sua bebida favorita), pois a construção do contêiner pode levar vários minutos.
(Brant Evans, CC BY-SA 4.0)
Assim que a construção do contêiner for concluída, o projeto será aberto dentro do contêiner. Os arquivos criados ou editados dentro do contêiner serão refletidos no sistema de arquivos fora do contêiner com as permissões de usuário adequadas aplicadas aos arquivos. Agora você pode prosseguir com o desenvolvimento dentro do contêiner. O VS Code pode até trazer suas chaves SSH e configuração do Git para o contêiner, para que a confirmação do código funcione exatamente como na edição fora do contêiner.
Próximos passos
Agora que concluiu a configuração básica, você pode aprimorar ainda mais a utilidade da configuração. Por exemplo:
- Modifique o Dockerfile para instalar software adicional (por exemplo, módulos Python necessários).
- Use uma imagem de contêiner personalizada. Por exemplo, se você estiver desenvolvendo Ansible, poderá usar o Ansible Toolset do Quay.io. (Certifique-se de adicionar o usuário
vscode
à imagem do contêiner por meio do Dockerfile.) - Envie os arquivos no diretório
.devcontainer
para o repositório do código-fonte para que outros desenvolvedores possam aproveitar a definição do contêiner para seus esforços de desenvolvimento.
O desenvolvimento dentro de um contêiner ajuda a evitar conflitos entre diferentes projetos, mantendo as dependências e o código de cada um separados. Você pode usar o Podman para executar contêineres em um ambiente sem raiz que aumenta a segurança. Ao combinar o VS Code, a extensão Remote - Containers e o Podman, você pode configurar facilmente um ambiente consistente para vários desenvolvedores, diminuir o tempo de configuração e reduzir bugs de diferenças nos ambientes de desenvolvimento de maneira segura.