Run ratings in Docker

This module shows how you create a Docker image and run it locally.

  1. Download the Dockerfile for the ratings microservice.

    $ curl -s https://raw.githubusercontent.com/istio/istio/release-1.16/samples/bookinfo/src/ratings/Dockerfile -o Dockerfile
    
  2. Observe the Dockerfile.

    $ cat Dockerfile
    

    Note that it copies the files into the container’s filesystem and then runs the npm install command you ran in the previous module. The CMD command instructs Docker to run the ratings service on port 9080.

  3. Create an environment variable to store your user id which will be used to tag the docker image for ratings service. For example, user.

    $ export USER=user
    
  4. Build a Docker image from the Dockerfile:

    $ docker build -t $USER/ratings .
    ...
    Step 9/9 : CMD node /opt/microservices/ratings.js 9080
    ---> Using cache
    ---> 77c6a304476c
    Successfully built 77c6a304476c
    Successfully tagged user/ratings:latest
    
  5. Run ratings in Docker. The following docker run command instructs Docker to expose port 9080 of the container to port 9081 of your computer, allowing you to access the ratings microservice on port 9081.

    $ docker run --name my-ratings  --rm -d -p 9081:9080 $USER/ratings
    
  6. Access http://localhost:9081/ratings/7 in your browser or use the following curl command:

    $ curl localhost:9081/ratings/7
    {"id":7,"ratings":{"Reviewer1":5,"Reviewer2":4}}
    
  7. Observe the running container. Run the docker ps command to list all the running containers and notice the container with the image <your user name>/ratings.

    $ docker ps
    CONTAINER ID        IMAGE            COMMAND                  CREATED             STATUS              PORTS                    NAMES
    47e8c1fe6eca        user/ratings     "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:9081->9080/tcp   elated_stonebraker
    ...
    
  8. Stop the running container:

    $ docker stop my-ratings
    

You have learned how to package a single service into a container. The next step is to learn how to deploy the whole application to a Kubernetes cluster.

Was this information useful?
Do you have any suggestions for improvement?

Thanks for your feedback!