instruction: Create a Dockerfile for Node.js, Alpine Linux with production best practices
output: ```dockerfile
  from the Dockerfilesh -c "yarn install && yarn run dev" - the command. You're starting a
  shell using sh (alpine doesn't have bash) and running yarn install to
  install packages and then running yarn run dev to start the development
  server. If you look in the package.json, you'll see that the dev script
  starts nodemon.You can watch the logs using docker logs <container-id>. You'll know you're
  ready to go when you see this:
  
  $ docker logs -f <container-id>
  nodemon -L src/index.js
  [nodemon] 2.0.20
  [nodemon] to restart at any time, enter `rs`
  [nodemon] watching path(s): *.*
  [nodemon] watching extensions: js,mjs,json
  [nodemon] starting `node src/index.js`
  Using sqlite database at /etc/todos/todo.db
  Listening on port 3000
  When you're done watching the logs, exit out by hitting Ctrl+C.Make sure you don't have any getting-started containers currently running.Run the image with a bind mount.Select the search box at the top of Docker Desktop.In the search window, select the Images tab.In the search box, specify the container name, getting-started.
  TipUse the search filter to filter images and only show Local images.Select your image and then select Run.Select Optional settings.In Host path, specify the path to the getting-started-app directory on your host machine.In Container path, specify /app.Select Run.You can watch the container logs using Docker Desktop.Select Containers in Docker Desktop.Select your container name.You'll know you're ready to go when you see this:
  
  nodemon -L src/index.js
  [nodemon] 2.0.20
  [nodemon] to restart at any time, enter `rs`
  [nodemon] watching path(s): *.*
  [nodemon] watching extensions: js,mjs,json
  [nodemon] starting `node src/index.js`
  Using sqlite database at /etc/todos/todo.db
  Listening on port 3000
  Develop your app with the development containerUpdate your app on your host machine and see the changes reflected in the container.In the src/static/js/app.js file, on line
  109, change the "Add Item" button to simply say "Add":
  
  - {submitting ? 'Adding...' : 'Add Item'}
  + {submitting ? 'Adding...' : 'Add'}
  Save the file.Refresh the page in your web browser, and you should see the change reflected
  almost immediately because of the bind mount. Nodemon detects the change and
  restarts the server. It might take a few seconds for the Node server to
  restart. If you get an error, try refreshing after a few seconds.
  Feel free to make any other changes you'd like to make. Each time you make a
  change and save a file, the change is reflected in the container because of
  the bind mount. When Nodemon detects a change, it restarts the app inside the
  container automatically. When you're done, stop the container and build your
  new image using:
  
  $ docker build -t getting-started .
  SummaryAt this point, you can persist your database and see changes in your app as you develop without rebuilding the image.In addition to volume mounts and bind mounts, Docker also supports other mount
  types and storage drivers for handling more complex and specialized use cases.Related information:docker CLI referenceManage data in DockerNext stepsIn order to prepare your app for production, you need to migrate your database
  ```