instruction: Create a Dockerfile for Node.js with production best practices
output: ```dockerfile
  from inside the Docker networks) - these can not connect using localhost, but the network alias (or DNS address) of the Kafka serviceSince there are two different methods clients need to connect, two different listeners are required - HOST and DOCKER. The HOST listener will tell clients to connect using localhost:9092, while the DOCKER listener will inform clients to connect using kafka:9093. Notice this means Kafka is listening on both ports 9092 and 9093. But, only the host listener needs to be exposed to the host.
  In order to set this up, the compose.yaml for Kafka needs some additional configuration. Once you start overriding some of the defaults, you also need to specify a few other options in order for KRaft mode to work.
  
  services:
   kafka:
   image: apache/kafka-native
   ports:
   - "9092:9092"
   environment:
   # Configure listeners for both docker and host communication
   KAFKA_LISTENERS: CONTROLLER://localhost:9091,HOST://0.0.0.0:9092,DOCKER://0.0.0.0:9093
   KAFKA_ADVERTISED_LISTENERS: HOST://localhost:9092,DOCKER://kafka:9093
   KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,DOCKER:PLAINTEXT,HOST:PLAINTEXT
  
   # Settings required for KRaft mode
   KAFKA_NODE_ID: 1
   KAFKA_PROCESS_ROLES: broker,controller
   KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
   KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9091
  
   # Listener to use for broker-to-broker communication
   KAFKA_INTER_BROKER_LISTENER_NAME: DOCKER
  
   # Required for a single node cluster
   KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1Give it a try using the steps below.If you have the Node app running
  ```