What I learnt in first two years of Agile Implementation
11 November 2020What is a data lake and why does your enterprise need it?
1 March 2023 Published by
BluePi
Data-Driven Business Transformation
Introduction to Docker
Container
- It is an isolated environment for running an application.
- it is a light weighted process.
Virtual Machine
- It is an abstraction of a machine (physical machine). abstraction in the sense it has separate OS and file system.
- It uses Hypervisor.
Docker Architecture
Docker follows Client Server Architecture. It has mainly two parts client and Server and all the transmissions happens using Restful api.
Dockerfile Syntax
So, how can you get started with Snowpro? It’s easier than you might think:
- # first line of the Dockerfile contains FROM tag (which image we'll use)
- # after the colon(:) we write OS distribution.
FROM node:alpine
COPY . ./App
- # Now we copy all our files to a App directory
- # Now it depends on what of project or requirements you are working on
- # if it is node application then
CMD node app.js
FROM, WORKDIR, COPY, ADD, RUN, ENV, EXPOSE, USER, CMD, ENTRYPOINT etc.
Useful Docker Commands
- To check docker version :
docker version
- To build an image from dockerfile :
docker build -t <tag_name> .
-t → is used to give image a tag so that it will be easy to use it later.
- To see all the docker images :
Note : If we don’t give a tag name then container name will be random.
docker image ls
here is one shorthand for this :
docker images
- To pull an image from Docker Hub :
docker pull <image_name>
- To run an Image :
docker run <image_name>
If image is not present in the locally then this command will download it from hub and then run it.
- To see all the running container :
docker ps
This command will only show you all the running container but to see all the container :
docker ps -a
- To run a container using Image in interactive mode :
docker run -it <image_name>
-it → it will map the container’s STDIN, STDOUT, STDERR to your’s Terminals so that you can interact with it.
- If you want to Ignore some files or directory to move into the container then use .dockerignore file. it is similar to .gitignore .
- To remove images :
docker image rm <image_name1> <image_name2>
- To remove images :
docker rmi -f $(docker images -a -q)
- To remove dangling images :
docker image prune
- To publish an image to Docker Hub :
docker image <image_name> <repo_name>
docker push <repo_name>
- Saving and loading Image from local System :
docker image save -o <tar/zip file> <image_name>
docker image load -i <tar/zip file>
- To run a container in detached mode :
docker run -d <image_name>
docker run -d –name <container_name> <image_name>
- To see the logs of a Container :
docker logs <container_name>
- Publishing Port :
docker run -d -p <host_machine_port>:<docker_port> –name <container_name> <image_name>
- Execute a command inside a running container :
docker exec <container_name> <cmd>
- Start and Stop a container :
docker start <container_name>
docker stop <container_name
- Remove a container :
docker rm <container_name>
docker rm -f <container_name>
- Remove all stopped container as well as Image :
docker system prune
Docker Volumes
docker system prune
Two docker container have separate file system and don’t share files to achieve this we have to use volumes.
- We can create volume by following command :
docker volume create <volume_name>
- To see the volumes :
docker volume inspect <volume_name>
docker run -d -v <volume_name>:/app/data <image_name>
- Copying file from container to host machine :
docker cp <container_path> <host_path>
- Map a host directory to container directory :
docker run -d -v $(pwd):/app <image_name>
docker-compose file
docker-compose is generally used when we have multiple applications and we want to combine them then docker will take care of the networking and ports itself and we just have to write one single command and our application will be up and running.
Example : Like we have a frontend in React and for PostgresDB and Node.js Backend and Redis for cache. In these kind of cases we used docker-compose.
Simple docker-compose.yaml
#version should be a string (number inside the double quotes)
version : “number”
services :
web :
build : ./frontend
ports :
– 3000:3000
api :
build : ./backend
ports :
– 3001:3001
environment :
– DB_URL = “”
db :
image : mongo:4.0-xenial
ports :
– 27017:27017
volumes :
– volume : /data/db
volumes :
name : volume
Docker Stop vs Docker Kill
- Rebuild the image of docker-compose :
docker-compose up –build
- Create an image from container :