Docker builds images and runs containers by using the docker engine on the host machine. Docker containers consist of all the dependencies and software needed to run an application in different environments.
What is Docker Image?
The concept of Image and Container is like class and object, in which an object is an instance of a class, and a class is the blueprint of the object. Images are different in Virtual Machines and dockers. In virtual machines, images are just snapshots of running virtual machines at different points in time, but Docker images are a little bit different. The most important and major difference is that Docker images are immutable. That is they can not be changed. In the real world, it happens a lot that software works on one computer but it does not work on others due to different environments. This issue is completely solved by docker images and using this, the application will work the same on everyone’s PC. Every developer on a team will have the exact same development instance. Each testing instance is exactly the same as the development instance. Your production instance is exactly the same as the testing instance. Also, developers around the world can share their Docker images on a platform called DockerHUB.
What is Docker Container?
They are actually Docker Virtual Machines but are commonly called Docker Containers. If a Docker image is a map of the house, then a Docker container is an actually built house, or in other words, we can call it an instance of an image. As per the official website, a container is a runnable instance of an image. You can create, start, stop, move, or delete a container using Docker API or CLI. You can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state. An application runs using a cluster of containers that are self-isolated from one another and also from the host machine where they are running.
Example: If a backend application is running on a Docker container at port 8000 and you tried to access it from the host machine, you will not be able to access it, as containers are self-isolated and in that case, you have to explicitly expose your application at a certain port and connect your machine port to that port.
Run Docker Container
docker run --publish 8000:8080
--detach --name alias_name application_name:1.0
Here an application running at port 8080 in a container is connected to port 8000 at the host machine. Now the host can access the application using URL localhost:8000
Difference between Docker Images and Containers
|It is a blueprint of the Container.
||It is an instance of the Image.
|Image is a logical entity.
||The container is a real-world entity.
|Images are created only once.
||Containers are created any number of times using an image.
|Images are immutable. One cannot attach volumes and networks.
||Containers change only if the old image is deleted and a new one is used to build the container. One can attach volumes, networks, etc.
|Images do not require computing resources to work.
||Containers require computing resources to run as they run with a Docker Virtual Machine.
|To make a docker image, you have to write a script in a Dockerfile.
||To make a container from an image, you have to run the “docker run <image>” command
|Docker Images are used to package up applications and pre-configured server environments.
||Containers use server information and a file system provided by an image in order to operate.
|Images can be shared on Docker Hub.
||It makes no sense in sharing a running entity, always docker images are shared.
|There is no such thing as a running state of a Docker Image.
||Containers use RAM when created and in a running state.
|An image must not refer to any state to remove the image.
||A container must be in a running state to remove it.
|One cannot connect to the images as these images are like snapshots.
||In this, one cannot connect them and execute the commands.
|Sharing of Docker Images is possible.
||Sharing of containers is not possible directly.
|It has multiple read-only layers.
||It has a single writable layer.
|These image templates can exist in isolation.
||These containers cannot exist without images.
Difference between Docker Container and VM Image
|Docker Container can be started within seconds.
||The VM image will take minutes to start.
|Docker container resource usage is very less.
||The VM image is very intense.
|The isolation is at the OS level.
||The isolation is at the process level.
|Docker container manages the dependencies are managed in the application level.
|| VM image manages the dependencies at the system level.
Frequently Asked Questions
1. Is Dockerfile an Image or Container?
Dockerfile can be reffered as a source code of docker image.
2. What is a Container In an Image?
Docker container is a runtime of Docker image.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses
are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!