instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  From Message
   ---- ------ ---- ---- -------
   Warning FailedScheduling 23s default-scheduler 0/42 nodes available: insufficient cpu
  No exemplo acima, o Pod de nome "frontend" não pôde ser agendado devido à nenhum
  nó possuir CPU suficiente para suprir seu requerimento de CPU. Mensagens de erro
  semelhantes a essa podem sugerir falha devido a falta de memória
  (PodExceedsFreeMemory). De maneira geral, se um Pod estiver pendente com uma
  mensagem deste tipo, há diversas possibilidades de solução a serem tentadas:Adicione mais nós ao cluster.Encerre Pods desnecessários para liberar espaço para Pods pendentes.Verifique se o Pod não é maior que todos os nós. Por exemplo, se todos os nós
  têm uma capacidade de cpu: 1, um Pod que requisita cpu: 1.1 nunca será
  agendado.Verifique se os nós não possuem taints. Se a maioria dos seus nós possuem
  taints, e o novo Pod não tolera tal taint, o escalonador somente considera
  agendar o Pod nos nós que não possuem aquele taint.Você pode verificar capacidades de nós e quantidades alocadas com o comando
  kubectl describe nodes. Por exemplo:kubectl describe nodes e2e-test-node-pool-4lw4
  Name: e2e-test-node-pool-4lw4
  [ ... linhas abreviadas para simplificação ...]
  Capacity:
   cpu: 2
   memory: 7679792Ki
   pods: 110
  Allocatable:
   cpu: 1800m
   memory: 7474992Ki
   pods: 110
  [ ... linhas abreviadas para simplificação ...]
  Non-terminated Pods: (5 in total)
   Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits
   --------- ---- ------------ ---------- --------------- -------------
   kube-system fluentd-gcp-v1.38-28bv1 100m (5%) 0 (0%) 200Mi (2%) 200Mi (2%)
   kube-system kube-dns-3297075139-61lj3 260m (13%) 0 (0%) 100Mi (1%) 170Mi (2%)
   kube-system kube-proxy-e2e-test-... 100m (5%) 0 (0%) 0 (0%) 0 (0%)
   kube-system monitoring-influxdb-grafana-v4-z1m12 200m (10%) 200m (10%) 600Mi (8%) 600Mi (8%)
   kube-system node-problem-detector-v0.1-fj7m3 20m (1%) 200m (10%) 20Mi (0%) 100Mi (1%)
  Allocated resources:
   (Total limits may be over 100 percent, i.e., overcommitted.)
   CPU Requests CPU Limits Memory Requests Memory Limits
   ------------ ---------- --------------- -------------
   680m (34%) 400m (20%) 920Mi (11%) 1070Mi (13%)
  No exemplo anterior, você pode verificar que se um Pod requisitar mais que 1,120
  CPUs ou mais que 6,23Gi de memória, tal Pod não caberá neste nó.Ao verificar a seção "Pods", você pode observar quais Pods estão consumindo
  espaço neste nó.A quantidade de recursos disponível aos Pods é menor que a capacidade do nó, pois
  daemons do sistema utilizam uma parcela dos recursos disponíveis. Dentro da API
  do Kubernetes, cada nó tem um campo .status.allocatable
  (consulte NodeStatus
  para mais detalhes).O campo .status.allocatable descreve a quantidade de recursos que está
  disponível a Pods naquele nó (por exemplo: 15 CPUs virtuais e 7538 MiB de
  memória). Para mais informações sobre recursos alocáveis do nó no Kubernetes,
  veja Reserve Compute Resources for System Daemons.Você pode configurar quotas de recursos
  para limitar a quantidade total de recursos que um namespace pode consumir.
  O Kubernetes garante quotas para objetos em um namespace específico quando há
  uma ResourceQuota naquele namespace. Por exemplo, se você atribuir namespaces
  específicos a times diferentes, você pode adicionar ResourceQuotas nestes
  namespaces. Criar quotas de recursos ajuda a evitar que um time utilize tanto de
  um recurso que chegue a afetar outros times utilizando o mesmo cluster.Você deve também considerar o nível de acesso fornecido aos usuários de qualquer
  namespace: acesso completo para escrita permite a alguém com este acesso
  remover qualquer recurso, incluindo uma configuração de ResourceQuota.Meu contêiner foi terminadoSeu contêiner pode ser terminado se faltar recursos para que este rode. Para
  verificar se um contêiner está sendo terminado por chegar no limite de algum
  recurso, utilize o comando kubectl describe pod no Pod em questão:kubectl describe pod simmemleak-hra99
  A saída será semelhante a:Name: simmemleak-hra99
  Namespace: default
  Image(s): saadali/simmemleak
  Node: kubernetes-node-tf0f/10.240.216.66
  Labels: name=simmemleak
  Status: Running
  Reason:
  Message:
  IP: 10.244.2.75
  Containers:
   simmemleak:
   Image: saadali/simmemleak:latest
   Limits:
   cpu: 100m
   memory: 50Mi
   State: Running
   Started: Tue, 07 Jul 2019 12:54:41 -0700
   Last State: Terminated
   Reason: OOMKilled
   Exit Code: 137
   Started: Fri, 07 Jul 2019 12:54:30 -0700
   Finished: Fri, 07 Jul 2019 12:54:33 -0700
   Ready: False
   Restart Count: 5
  Conditions:
   Type Status
   Ready False
  Events:
   Type Reason Age
  ```