Start with Docker

docker wallpaper

In this post, I want to help to start with Docker for the basis. I’m starting to learn Docker, then the following posts are my study step-by-step. Please comment below or in the forum is something is wrong.

What is Docker?

Docker is:

  • an open-source project for automating the deployment of applications as portable, self-sufficient containers that can run on the cloud or on-premises
  • is also a company that promotes and evolves this technology, working in collaboration with cloud (like Azure), Linux, and Windows vendors, including Microsoft.
Docker deploys containers at all layers of the hybrid cloud
Docker deploys containers at all layers of the hybrid cloud

So, Docker containers can run anywhere, on-premises in the customer datacenter, in an external service provider or in the cloud, on Azure. Docker image containers can run natively on Linux and Windows. However, Windows images can run only on Windows hosts and Linux images can run on Linux hosts and Windows hosts (using a Hyper-V Linux VM, so far), where host means a server or a VM.

Then, developers can use development environments on Windows, Linux, or macOS. On the development computer, the developer runs a Docker host where Docker images are deployed, including the app and its dependencies. Developers who work on Linux or on macOS use a Docker host that is Linux based, and they can create images only for Linux containers. Developers who work on Windows can create images for either Linux or Windows Containers.

Install Docker

First step in this long post is to install Docker. In the office website, there is a section for Getting started where you can download the version of Docker for your operating system. After the installation, you will restart your machine.

Docker Desktop Installation
Docker Desktop Installation

Then, I recommend to create an account in Docker to download containers from the hub.

Create a website

In this tutorial, to start with Docker, I want to create a website cloning a repository from GitHub. For this reason, the first operation to perform is to download and use locally a Docker image. For the purpose of this tutorial, I’m going to use Ubuntu. As a reminder, if you are using Windows 10, you take advantage from Microsoft’s Windows Subsystem for Linux.

Download the first Docker image

Getting images onto your Docker host is called “pulling“. To pull the first image, open a Command Prompt or Terminal and type:

docker image pull ubuntu:latest
Command Prompt pulls an Ubuntu Docker image
Command Prompt pulls an Ubuntu Docker image

How you can see in the screenshot, Docker downloads the image.

latest: Pulling from library/ubuntu
da7391352a9b: Already exists
14428a6d4bcd: Already exists
2c2d948710f2: Already exists
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Now, if you open Docker Desktop, you can see a new image called Ubuntu.

Docker Desktop with the Ubuntu image
Docker Desktop with the Ubuntu image

If you want to have a list of Docker image in your computer, run in your terminal this command:

docker images

The result is a list of the Docker images installed in your computer.

List of Docker images
List of Docker images

How you can see in the image above, each image as an Image ID. This is quite important for future operations such as copying files or delete an image.

When referencing images, you can refer to them using either IDs or names. If you’re working with image ID’s, it’s usually enough to type the first few characters of the ID – as long as it’s unique. Docker will know which image you mean.

Create a container

Now that we have an image pulled locally, we can use the Docker command to launch a container from it. In your prompt, type

docker container run -it ubuntu:latest /bin/bash
You are inside a Docker container
You are inside a Docker container

Look closely at the output from the previous commands. You should notice that the shell prompt has changed in each instance. This is because the -it flags switch your shell into the terminal of the container. You are literally inside of the new container!

Let’s examine that docker container run command.

docker container run tells the Docker daemon to start a new container. The -it flags tell Docker to make the container interactive and to attach the current shell to the container’s terminal (we’ll get more specific in the chapter on containers).

So far, I gave you some information about Docker and images. Now, we start the funny part.

Download a project from GithHub

In this section, we are going to clone a simple project that contains a website and run it as a container.

First, in one of your local folders, open the Command Prompt and clone this project:

git clone https://github.com/erossini/psweb

So, we can build a container from this file. Enter in folder that your clone. There are few files for the project. Take a look to the Dockerfile.

# Linux x64
FROM alpine

LABEL maintainer="enrico.rossini.uk@live.com"

# Install Node and NPM
RUN apk add --update nodejs nodejs-npm

# Copy app to /src
COPY . /src

WORKDIR /src

# Install dependencies
RUN  npm install

EXPOSE 8080

ENTRYPOINT ["node", "./app.js"]

This file tells Docker to download an image called alpine, then run apk, copy the files from the local path to the src folder. Then, run npm. EXPOSE tells to what port the webserver is listening. Now, you are going to build the container from this Dockerfile. In the prompt type:

docker image build -t test:latest .
Building a container from a Dockerfile
Building a container from a Dockerfile

After a minute or two, Docker has built the image and restore all the npm packages. Ready for the next step.

Building a container from a Dockerfile - End of the process
Building a container from a Dockerfile – End of the process

Run the container

Finally, we can run the container. Type:

docker container run -d --name web1 --publish 8080:8080 test:latest
Run a container
Run a container

This command doesn’t do much but you if you the browser… type:

https://localhost:8080

you have your website up and running.

Website from a Docker container
Website from a Docker container