Sign inSign up

ygoamaral/node

By ygoamaral

Updated 3 months ago

Ambiente NodeJs com NPM, Yarn, Nodemon, PM2 e um drive de conexão com base de dados Oracle.

Image
0

10K+

ygoamaral/node repository overview

Docker - NodeJs

Badge Badge Badge Badge Badge Badge Badge Badge

Sobre

Imagem para criação de container de serviço em NodeJs.

Criando um projeto

1 - Crie uma pasta que será o local onde ficará o projeto

mkdir <meu-projeto>

2 - Logo em seguide acesse a pasta criada

cd <meu-projeto>

3 - Por fim, crie um container para executar seu projeto.

docker container run -it --name <nome-container> --net host -v $PWD:/usr/app ygoamaral/node:latest bash

Obs: Para mais segurança, especifique uma porta e remova o parâmetro '--net host'.

4 - A partir de agora, você estará em um ambiente Docker com Nodejs. Caso queira, crie seu projeto node com o comando abaixo:

npm init

Retornando para o projeto

1 - Inicie o container

docker container start <nome-container>

2 - Acesse o projeto por esse container

docker exec -it <nome-container> bash

Dica de script de execução do projeto

Crie o arquivo .env, que terá variáveis que poderam ser utilizadas para configurar o container do seu projeto. Logo em seguida, crie um arquivo que será responsável por iniciar o container com base nas configurações do .env (Dica de nome do arquivo: docker-service.sh). Deixe esses arquivos na raiz do projeto:

  • Exemplo de conteúdo do arquivo .env:
PORTA=3333
SEGUNDO_PLANO=sim
DOCKER_IMAGEM=ygoamaral/node:latest
INICIAR_COM_SO=nao
DOCKER_CONTAINER=meu-servico-node
  • Exemplo de conteúdo do arquivo docker-service.sh:
#!/bin/bash

# Capturando variavel de ambiente do arquivo .env
eval "$(grep ^PORTA= .env)"
eval "$(grep ^SEGUNDO_PLANO= .env)"
eval "$(grep ^DOCKER_IMAGEM= .env)"
eval "$(grep ^INICIAR_COM_SO= .env)"
eval "$(grep ^DOCKER_CONTAINER= .env)"

if [ "$SEGUNDO_PLANO" == "sim" ]; then
  PARAMETRO_SEGUNDO_PLANO=" -d "
  PARAMETRO_COMANDO=" npm start " # adicionar comando de inicializacao no package.json na propriedade scripts.start
else
  PARAMETRO_COMANDO=" bash "
fi

PARAMETRO_INICIAR_COM_SO=$([ "$INICIAR_COM_SO" == "sim" ] && echo " --restart=always ")

excluir_container(){
  docker container rm $DOCKER_CONTAINER -f
}

iniciar_container(){
  # Criando o container
  docker container run \
  -it \
  $PARAMETRO_SEGUNDO_PLANO \
  --name $DOCKER_CONTAINER \
  $PARAMETRO_INICIAR_COM_SO \
  -p $PORTA:$PORTA \
  -v $PWD:/usr/app \
  $DOCKER_IMAGEM \
  $PARAMETRO_COMANDO
}

if [ ! "$(docker ps -aq -f name=^$DOCKER_CONTAINER$)" ]; then
  iniciar_container
else
  excluir_container && iniciar_container
fi
Exemplos de utilização
  • Em ambiente de desenvolvimento o arquivo .env poderia ficar assim:
PORTA=3333
SEGUNDO_PLANO=nao
DOCKER_IMAGEM=ygoamaral/node:latest
INICIAR_COM_SO=nao
DOCKER_CONTAINER=meu-servico-node
  • E para o ambiente de produção, o .env ficaria assim:
PORTA=3333
SEGUNDO_PLANO=sim
DOCKER_IMAGEM=ygoamaral/node:latest
INICIAR_COM_SO=sim
DOCKER_CONTAINER=meu-servico-node
  • Agora é só executar o script:
./docker-service.sh

Obs1: a variável 'SEGUNDO_PLANO' pode ser usada para executar o container em background (com o valor 'sim') ou acessando o 'bash' do container (com o valor 'nao').

Obs2: a variável 'INICIAR_COM_SO' expecifica se o container vai iniciar junto com o sistema operacional ou não, com os respectivos valores, 'sim' ou 'nao'.

Tag summary

Content type

Image

Digest

sha256:18bd70b1c

Size

572.4 MB

Last updated

3 months ago

docker pull ygoamaral/node