Docker from scratch — All you need to know
What is Docker?
- Docker is an open platform for developing, shipping, and running applications.
- It enables us to separate applications from the infrastructure so anyone can deliver software quickly.
Why Docker?
In a nutshell: Write Code Once -> Create Docker Container -> Run Anywhere
- Anyone write code locally and share their work with anyone using Docker containers.
- They can use Docker to push their applications into a test environment and can execute automated or manual tests.
- When testing is complete, getting the fix (For e.g. to the customer) is as simple as pushing the updated image to the production environment.
How Docker Works ?
- Docker provides the ability to package and run an application in a loosely isolated environment called a container.
- The isolation and security allow us to run many containers simultaneously on a single host.
Sounds Interesting but how does it differ from Virtual Machines ?
Some advantages of Docker Containers over Virtual Machines
- Fast Execution Speed
- Low RAM and Drive memory usage
- Very Fast Startup Time (generally in milliseconds :-)
Dockerfile, Image & Container
- A Docker Image is basically a set of rules or template for creating an environment
- We can create docker images using Dockerfile
- Dockerfile is basically a text file containing a set of instructions for creating the Image
- A Docker Container is basically a running instance of an Image
Enough Talk… Lets Create some Conatiners
Python Hello World inside a Docker Container
- For this I have created a python file ‘main.py’ which contain a print statement.
- Now lets go to Docker Hub and search for python.
- Under Simple Tags section, we can see different types of versions & flavours of python image available. We will we using 3.8-alpine since alpine’s images are very less in size.
Step 1. Lets create a Dockerfile
- I have created a simple file named Dockerfile, with the following content
- FROM is used to refer the Docker Image from DockerHub repository.
- WORKDIR is basically our working directory inside the image. It is similar to cd(change directory command) in Linux / Windows.
- COPY command is use to copy files/folders inside the image
- CMD is used to run any command in the container’s terminal.
Step 2. Building the Image
The command to build the above dockerfile isdocker build -t python_hello .-t : specifies the name of image (python_hello)
‘.’ : is the location of dockerfile
Step 3. Lets Run the Container
The Command isdocker run python_hello
Here is the output we got. The container starts, executed our command and exited.
Some More Examples of Dockerfile
- Creating an Apache HTTP Server
- Dockerfile (Expose 80 tell the container to listen on port 80 (default HTTP port))
- Build using docker build -t apache-httpd
- Run using docker run -p 8080:80 apache-httpd
- -p 8080:80 forwards the 80 port inside the container to 8080 port on Host machine
- Result
Inspecting a running Docker Container
Now your docker container is successfully up & running. How great it will be if we can see its running state and perform various operations like
- listing the directory structure
- see & modifying the content of any file
- running any base unix/linux command (depends upon the host OS and base docker image) etc.
Lets consider our Docker Image for Apache HTTP Server is up & running.
1. See all Docker Images using command: docker image ls
2. See all running Docker Containers using: docker container ls
As you can see our Apache Container is running with Container ID 25d3219ce4e7. Note this Container ID which can be used to uniquely identify every running docker instance.
3. Now to run any command you can use docker exec
For e.g. (considering Host OS is Linux)+ Get Current Directory / WORKDIR
docker exec 25d3219ce4e7 pwd+ List every file in WORKDIR inside container
docker exec 25d3219ce4e7 ls+ Print Content of a file inside container
docker exec 25d3219ce4e7 cat htdocs/index.html+ Ping google.com from inside the container
docker exec 25d3219ce4e7 ping www.google.com+ We can even get a complete shell of that container using
docker exec 25d3219ce4e7 bash (OR)
docker exec 25d3219ce4e7 sh
Now, what’s Next?
Please also have a look at my next blog of this series as well. In this article we will experience the magic of docker-compose by using it to combine multiple docker images.
Congratulation on sucessfully building your docker container & Thanks for sticking till the end.
Please let me know about your views or queries in the comment section.