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.
- 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.
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 chamadonode
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 nomenode
(criado acima) o comandosh
que é o terminal disponível por padrão nesta imagem.
Depois de executar o comando acima o terminal estará pronto para receber comandos normais do node como:
yarn dev
npm install nome_do_pacote
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
docker rm node
docker rmi node:lts-alpine