instruction: Create a Dockerfile for Nginx with production best practices
output: ```dockerfile
  from both matchLabels and matchExpressions, must be satisfied in order to match.
  
  The template field contains the following sub-fields:
  
  The Pods are labeled app: nginxusing the .metadata.labels field.
  The Pod template's specification, or .template.spec field, indicates that
  the Pods run one container, nginx, which runs the nginx
  Docker Hub image at version 1.14.2.
  Create one container and name it nginx using the .spec.template.spec.containers[0].name field.
  
  Before you begin, make sure your Kubernetes cluster is up and running.
  Follow the steps given below to create the above Deployment:
  
  Create the Deployment by running the following command:
  kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
  
  Run kubectl get deployments to check if the Deployment was created.
  If the Deployment is still being created, the output is similar to the following:
  NAME READY UP-TO-DATE AVAILABLE AGE
  nginx-deployment 0/3 0 0 1s
  When you inspect the Deployments in your cluster, the following fields are displayed:
  
  NAME lists the names of the Deployments in the namespace.
  READY displays how many replicas of the application are available to your users. It follows the pattern ready/desired.
  UP-TO-DATE displays the number of replicas that have been updated to achieve the desired state.
  AVAILABLE displays how many replicas of the application are available to your users.
  AGE displays the amount of time that the application has been running.
  
  Notice how the number of desired replicas is 3 according to .spec.replicas field.
  
  To see the Deployment rollout status, run kubectl rollout status deployment/nginx-deployment.
  The output is similar to:
  Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
  deployment "nginx-deployment" successfully rolled out
  
  Run the kubectl get deployments again a few seconds later.
  The output is similar to this:
  NAME READY UP-TO-DATE AVAILABLE AGE
  nginx-deployment 3/3 3 3 18s
  Notice that the Deployment has created all three replicas, and all replicas are up-to-date (they contain the latest Pod template) and available.
  
  To see the ReplicaSet (rs) created by the Deployment, run kubectl get rs. The output is similar to this:
  NAME DESIRED CURRENT READY AGE
  nginx-deployment-75675f5897 3 3 3 18s
  ReplicaSet output shows the following fields:
  
  NAME lists the names of the ReplicaSets in the namespace.
  DESIRED displays the desired number of replicas of the application, which you define when you create the Deployment. This is the desired state.
  CURRENT displays how many replicas are currently running.
  READY displays how many replicas of the application are available to your users.
  AGE displays the amount of time that the application has been running.
  
  Notice that the name of the ReplicaSet is always formatted as
  [DEPLOYMENT-NAME]-[HASH]. This name will become the basis for the Pods
  which are created.
  The HASH string is the same as the pod-template-hash label on the ReplicaSet.
  
  To see the labels automatically generated for each Pod, run kubectl get pods --show-labels.
  The output is similar to:
  NAME READY STATUS RESTARTS AGE LABELS
  nginx-deployment-75675f5897-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=75675f5897
  nginx-deployment-75675f5897-kzszj 1/1 Running 0 18s app=nginx,pod-template-hash=75675f5897
  nginx-deployment-75675f5897-qqcnn 1/1 Running 0 18s app=nginx,pod-template-hash=75675f5897
  The created ReplicaSet ensures that there are three nginx Pods.
  
  Note:You must specify an appropriate selector and Pod template labels in a Deployment
  (in this case, app: nginx).
  Do not overlap labels or selectors with other controllers (including other Deployments and StatefulSets). Kubernetes doesn't stop you
  ```