Creating Images Using a Dockerfile

1 hour
  • 3 Learning Objectives

About this Hands-on Lab

You’ve decided to Dockerize your weather-app. Before you can do this, you’ll need to create an image for it. And you’ll want to keep the image small, so you will create it using a multi-stage build.

Using instructions in a Dockerfile, build the image, then test it by creating a container that uses it.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create a docker file

Create a docker file:

vi Dockerfile

Dockerfile contents:

FROM node AS source
RUN mkdir -p /node/weather-app
ADD src/ /node/weather-app
WORKDIR /node/weather-app
RUN npm install

FROM node:alpine
ARG APP_VERSION=V1.1
LABEL org.label-schema.version=$APP_VERSION
ENV NODE_ENV="production"
COPY --from=source /node/weather-app /node/weather-app
WORKDIR /node/weather-app
EXPOSE 3000
ENTRYPOINT ["./bin/www"]
Build the image

Use Git commit hash as the image tag:

cd src
git log -1 --pretty=%H
cd ../

Build the image:

sudo docker image build -t linuxacademy/weather-app:[HASH] --build-arg APP_VERSION=2.0 .
Deploy a test container using the image just created

Create the weather-app container:

sudo docker container run -d --name weather-app -p 8080:3000 linuxacademy/weather-app:<HASH>

Additional Resources

In the /home/cloud_user/ directory, you will find the weather-app. Navigate to it. In that directory you will find the source code to the weather-app in src.

Create the Dockerfile

Create a Dockerfile that will use a multi-stage build. The first stage will use node as the base image, and will be called source.

  • Change the directory to weather-app.
  • Create and edit a Dockerfile file.
    • In the file, create a directory for the source code: /node/weather-app.
    • Add the code from src to /node/weather-app on the image.
    • Set /node/weather-app as the working directory.
    • Execute an npm install to install the dependencies.
    • The second stage will use node:alpine as the base image.
    • Create an argument called APP_VERSION that will set the version of the application.
    • Set an environment variable called NODE_ENV and set it to production.
    • Copy /node/weather-app from the source build stage to /node/weather-app.
    • Set /node/weather-app as the working directory.
    • Expose port 3000.
    • Set ./bin/www as the entrypoint.
  • Save the changes to the file.

Build the weather-app image

  • In the src directory, execute git log -1 --pretty=%H to get the commit hash.
  • Use the commit hash as the tag when you execute the image build.
  • Using the build argument, flag set APP_VERSION to 2.0.

Deploy a test container using the image.

  • Create a container called weather-app using the image you just built, and run it as a background process.
    • Publish port 8080 to 3000 on the container.
  • Execute curl localhost:8080 to test the container.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?