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. Docker is also a company that promotes and evolves this technology, working in collaboration with cloud, Linux, and Windows vendors, including Microsoft.
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.
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.
Containers include the application and all its dependencies. However, they share the OS kernel with other containers, running as isolated processes in user space on the host operating system.
In Docker, each layer is the resulting set of changes that happen to the filesystem after executing a command, such as, installing a program.
So, when you "look" at the filesystem after the layer has been copied, you see all the files, included the layer when the program was installed.
You can think of an image as an auxiliary read-only hard disk ready to be installed in a "computer" where the operating system is already installed.
Similarly, you can think of a container as the "computer" with the image hard disk installed. The container, just like a computer, can be powered on or off.
A package with all the dependencies and information needed to create a container. An image includes all the dependencies (such as frameworks) plus deployment and execution configuration to be used by a container runtime. Usually, an image derives from multiple base images that are layers stacked on top of each other to form the container's filesystem. An image is immutable once it has been created.
A text file that contains instructions for building a Docker image. It's like a batch script, the first line states the base image to begin with and then follow the instructions to install required programs, copy files, and so on, until you get the working environment you need.
The action of building a container image based on the information and context provided by its Dockerfile, plus additional files in the folder where the image is built. You can build images with the following Docker command:
An instance of a Docker image. A container represents the execution of a single application, process, or service. It consists of the contents of a Docker image, an execution environment, and a standard set of instructions. When scaling a service, you create multiple instances of a container from the same image. Or a batch job can create multiple containers from the same image, passing different parameters to each instance.
Offer a writable filesystem that the container can use. Since images are read-only but most programs need to write to the filesystem, volumes add a writable layer, on top of the container image, so the programs have access to a writable filesystem. The program doesn't know it's accessing a layered filesystem, it's just the filesystem as usual. Volumes live in the host system and are managed by Docker.
A mark or label you can apply to images so that different images or versions of the same image (depending on the version number or the target environment) can be identified.
A collection of related Docker images, labeled with a tag that indicates the image version. Some repos contain multiple variants of a specific image, such as an image containing SDKs (heavier), an image containing only runtimes (lighter), etc. Those variants can be marked with tags. A single repo can contain platform variants, such as a Linux image and a Windows image.
A service that provides access to repositories. The default registry for most public images is Docker Hub (owned by Docker as an organization). A registry usually contains repositories from multiple teams. Companies often have private registries to store and manage images they've created. Azure Container Registry is another example.
A public registry to upload images and work with them. Docker Hub provides Docker image hosting, public or private registries, build triggers and web hooks, and integration with GitHub and Bitbucket.
Runs on host machine creates and manages docker objects such as images, containers, network, volume, data, etc.
UI for docker which accepts commands from user and communicate with docker host.
When using Docker, a developer creates an app or service and packages it and its dependencies into a container image. An image is a static representation of the app or service and its configuration and dependencies.
To run the app or service, the app's image is instantiated to create a container, which will be running on the Docker host. Containers are initially tested in a development environment or PC.
The registry is like a bookshelf where images are stored and available to be pulled for building containers to run services or web apps. There are private Docker registries on-premises and on the public cloud. Docker Hub is a public registry maintained by Docker.
- Build image
- Ship image
- Run image
First we have to start the docker daemon by
service docker start
To view status of the service use this command
service docker status
To stop service use this command
service docker stop
Run an image(hello-world) from DockerHub
docker run hello-world
hello-world is an image. we just made container from it. It will first try to find this image locally then on repository. Default repository is DockerHub
To check existing images
docker image ls
We can pull images from registry without making container of it with this command
docker pull hello-world
To list all the containers
By default it will only show running containers. To get all containers we can use
docker ps -a
To get container sizes use
docker ps -s
Now we are going to run our Ubuntu container.
docker run -it ubuntu:latest bash
- -it flag is for making it interactive.
- We can also specify version I used latest version here.
- Now we can select what we want to use we are using bash here.
- After that we go inside container which contains Ubuntu
- We can execute any ubuntu command that we want inside our containers
- we can install anything that we can install on ubuntu
- when we exit ubuntu & terminal with exit command we also exit from container
docker start "container name/id"
- To go inside container use command
- 'Attaching to a container' is the act of starting a terminal session within the context that the container (and any programs therein) is running. This is primarily used for debugging purposes, but may also be needed if specific data needs to be passed to programs running within the container.
docker attach "container name/id"
To go inside container without stoping it use
To get help on all docker commands
To get help on docker container commands
docker container --help
To get help on docker image commands
docker image --help
docker ps -a
docker rm "container id"
docker rmi "image id"
Remove image forcefully
docker rmi -f "image id"
To save hello-world container as hello-world.tar
docker save -o hello-world.tar hello-world:latest
To add hello-world to registry from tar
docker load -i hello-world.tar
- To create a copy of image hello-world with name hello and add it to registry
- But there image id would be same
docker tag hello-world:latest hello:2
First we have to commit our changes in that container
docker commit "image id"
now we have to change name of image
docker tag "image id" "dockerhub username"/"imagename":tag
now login to our docker account
push container image to dockerhub
docker push "dockerhub username"/"imagename"
Done now we can use this image to create containers
FROM shows the base image for example
FROM python 2.7
WORKDIR sets the working directory
COPY copies new files or directories to container
- RUN executes any command in new layer on top of current image and commit result
- Install any needed package specified in requirments.txt
RUN pip install -r requirements.txt
CMD provide defaults for executing container
CMD python hello.py
Build docker image with command