instruction: Create a Dockerfile for Node.js, Alpine Linux with production best practices
output: ```dockerfile
  from 8.8.8.8: seq=2 ttl=37 time=41.296 ms
  ...Finally, tear down your test service:
  
  $ docker service rm demo
  WindowsOpen a PowerShell, and initialize Docker Swarm mode:
  
  $ docker swarm init
  If all goes well, you should see a message similar to the following:
  
  Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager.
  
  To add a worker to this swarm, run the following command:
  
   docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377
  
  To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.Run a simple Docker service that uses an alpine-based filesystem, and isolates a ping to 8.8.8.8:
  
  $ docker service create --name demo alpine:latest ping 8.8.8.8
  Check that your service created one running container:
  
  $ docker service ps demo
  You should see something like:
  
  ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
  463j2s3y4b5o demo.1 alpine:latest docker-desktop Running Running 8 seconds agoCheck that you get the logs you'd expect for a ping process:
  
  $ docker service logs demo
  You should see the output of a healthy ping process:
  
  demo.1.463j2s3y4b5o@docker-desktop | PING 8.8.8.8 (8.8.8.8): 56 data bytes
  demo.1.463j2s3y4b5o@docker-desktop | 64 bytes
  ```