Skip to content

Instantly share code, notes, and snippets.

@philipecampos
Created February 19, 2023 15:18
Show Gist options
  • Save philipecampos/16cae8b5ecb3900a98a8c2ff9a6ae71d to your computer and use it in GitHub Desktop.
Save philipecampos/16cae8b5ecb3900a98a8c2ff9a6ae71d to your computer and use it in GitHub Desktop.
Imagem genérica nodejs para desenvolvimento de projetos

Contextualizando

Era meu desejo usar node sem precisar instalar diversas versões na minha máquina, então usando docker eu poderia ter a versão que quisesse naquele projeto e logo em seguida poderia descartar essa instalação sem ficar ocupando espaço em disco ou memória ram com um servidor node.

Considerações

  • Todos os comandos abaixo precisam do docker instalado previamente
  • Os comandos levam em consideração que o diretório de todos os projetos é /home/seu_usuario/www
docker run -d -i -v /home/$(whoami)/www:/var/www --network host -w /var/www --name node node:lts-alpine
  • docker run Cria um novo contêiner

  • -d é usado para iniciar um contêiner em segundo plano, ou seja, como um daemon. Assim seu terminal é liberado imediatamente após o comando.

  • -i indica que você deseja manter a entrada STDIN aberta, permitindo que você envie comandos para dentro do contêiner, sem este parâmetro ele seria executado e encerrado imediatamente após a execução.

  • -v indica que o conteúdo do diretório /home/$(whoami)/www será sincronizado ao diretório /var/www, ou seja, a mudança em arquivos em um dos diretórios irá refletir no outro.

  • --network host Este parâmetro deve ser usado apenas durante o desenvolvimento pois diz ao contêiner que ele pode acessar a rede do host e qualquer serviço em execução nele sem restrições, portanto, ele deve ser usado com cautela. Ele é útil quando você não sabe qual porta o projeto vai abrir no contêiner e você precisa acessá-lo, no host ou em outros lugares.

  • -w Indica que ao entrar no terminal do contêiner o diretório padrão será o /var/www

  • --name Nomeia o contêiner de "node" no lugar de um nome aletório gerado pelo docker

  • node:lts-alpine indica que será instalado uma imagem do node na versão LTS (suporte longo) instalado no sistema operacional Linux Alpine, essa é uma distribuição que possui cerca de 5MB, ou seja, essa imagem terá praticamente somente o tamanho do nodejs.

Entrando no terminal do node

docker exec -it -u node node sh
  • docker exec Executa um comando dentro de um contêiner

  • -i Mesma explicação do comando acima

  • -t Cria um terminal TTY para o contêiner, o que significa que você pode ver a saída do contêiner e interagir com ele como se estivesse usando um terminal de linha de comando.

  • -u Esse conteiner já possui um usuário padrão chamado node que possui o id 1000. Assim os arquivos gerados no diretório /var/www teriam a mesma permissão do meu usuário local linux que também possui id 1000 ele pode ser substituído por -u 0 ou -u root. Assim o usuário que executa o comando é o root que possui permissão para modificar ou instalar qualquer coisa dentro do contêiner.

  • node sh Significa que quero executar em um contêiner com o nome node (criado acima) o comando sh que é o terminal disponível por padrão nesta imagem.

Extras

Depois de executar o comando acima o terminal estará pronto para receber comandos normais do node como:

yarn dev
npm install nome_do_pacote

Se você desligar o computador

O contêiner irá parar mas ainda existirá. Digite o comando abaixo e veja que ainda existe um conêiner chamado node

docker ps -a

Execute o comando abaixo para iniciar o contêiner node parado

docker start node

Excluindo contêiner node

docker rm node

Excluindo imagem do node:lts-alpine

docker rmi node:lts-alpine
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment