15 Docker Command Tricks every DevfOps Engineer Should know

 

Docker container command Tips & Tricks


Here my idea is to use the Unix/Linux 'alias' command for most those common docker container, network, volume sub-commands to form as shorten to give you more productivity while working on developing the docker images and playing around the newly constructing containers. This trick work on bash, zsh shells.

Improve productivity by using alias for docker cli
Improve Productivity with smart work alias for Docker commands
 
First examine the docker container listing with the powerful option '--format'
docker container ps -s \
  --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Size}}"
docker ps command

To get the logs of any applications that runs in containers we can use the following:
alias dkrlogs='docker logs'
alias dkrlogsf='docker logs -f '

docker logs with alias trick

List of the images
alias dkri='docker image ls'
docker image list alias trick

The container list
alias dkrcs='docker container ls'
docker container list alias trick

Remove the 'Exited' status container
alias dkrrm='docker rm'
docker rm alias trick

Docker top list to see the container inside process ID

alias dkrtop='docker top'
docker top alias trick

All the above nice commands will be helpful for the pipelines, Containerization makes CI/CD seamless. 

We could add the following alias lines to our .bashrc or .bash_profile or .bash_aliases where you can add all simplified docker command as alias:
alias cleanall='docker container rm $(docker ps -a -q)'
alias dkrps='docker ps --all --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}"'

Improved version of Bash aliases for Docker command

After a deep search on the internet for multiple docker alias examples, prepared the following to improve productvity.
## Basic Docker Aliases
alias dps="docker ps"       # List running containers.
alias dpa="docker ps -a"    # List all containers, including stopped ones.
alias di="docker images"    # List all Docker images.
alias dip="docker container inspect  -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1"  # Get the IP address of a container.
alias dl="docker ps -l -q"  # Get the ID of the most recently created container.
 
## Container Management
alias dstop='docker stop $(docker ps -a -q)'    # Stop all containers.
alias drm='docker rm $(docker ps -a -q)'    # Remove all containers.
alias drmf='docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)'     # Stop and remove all containers.
 
## Image Management
alias dri='docker rmi $(docker images -q)'  # Remove all Docker images.
 
# Docker Volume management
alias dvls='docker volume ls'
alias dbclean='docker volume rm $(docker volume ls -q)'
 
## Docker log management 
alias dlogs="docker logs "
alias dlogsf="docker logs -f "
 
## Docker compose commands simplified 
dcup() {
 cd /root/myproject
 docker-compose up -d
 echo "After up:"; docker-compose ps
}
 
dcdown() {
    echo "Before down:";  cd /root/myproject; docker-compose ps
    docker-compose down
}
 
dcbuidl() {
 echo "Build with docker-compose"
 cd /root/myproject
 docker-compose up --build
}

   

How to know which docker volume connected to your container?


Let's create a container named as myweb with a docker volume attached as web-volume.
docker run -d --name myweb \
 --mount source=web-volume,destination=/usr/share/nginx/html nginx
Using inspect sub-command on the container --format string with JSON forms is going to return a Json block:
  docker container inspect \
  --format '{{json .HostConfig.Mounts}}' myweb |jq

# simplified alias with parameterized 
alias knv2c="docker container inspect --format '{{json .HostConfig.Mounts}}' $1"
kn2c myweb|jq

alias k2c="docker container inspect -f '{{json .HostConfig.Mounts }}'"
docker container inspect with -f option json format


How to get a container IP from Docker Host?

Let's create a network as vybhava-net and add couple of containers to it as shown:
docker network create vybhava-net
docker run --net vybhava-net --name nginx -d nginx
# same way create n1, n2, n3 etc.

docker network inspect vybhava-net -f '{{json .Containers}}'|jq
  
Image here shows you the filtered JSON output for containers which are attached to the network 'vybhava-net'

Docker network inspect filtered for containers



How to get the network block and IPAddress of a given container? 

Getting the IPaddress of a container is as follows: 

Let's create an example container name as urweb.
  
docker run -d --name urweb \
--mount source=zing,destination=/usr/share/nginx/html nginx:alpine
Command execution related to alias using shell arguments:
docker container \
  inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' urweb

alias getip="docker container inspect  -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1"
getip urweb 
The following is the execution of the alias command for the container within the default network.

How to get the User defined bridge network IPAddress? 


Let's make user defined network as mynet.
  
docker network create mynet; docker network ls

#create a mongo container
docker run -d --rm --name mongodb01 --network mynet  \
-e MONGO_INITDB_ROOT_USERNAME=admin  \
-e MONGO_INITDB_ROOT_PASSWORD="vybhavatechnologies" mongo

#Create a mongo-express container 
docker run -it --rm \
    --network mynet \
    --name mongo-express \
    -p 8081:8081 \
    -e ME_CONFIG_OPTIONS_EDITORTHEME="ambiance" \
    -e ME_CONFIG_MONGODB_SERVER="mongodb01" \
    -e ME_CONFIG_MONGODB_ADMINUSERNAME="admin" \
    -e ME_CONFIG_MONGODB_ADMINPASSWORD="vybhavatechnologies" \
    mongo-express
After adding two containers mongo, mongo-express to the mynet we can inspect the Network settings map to this user defined bridge network.
	
$ docker inspect -f '{{.Name}}-{{.NetworkSettings.Networks.mynet.IPAddress }}' 96bbda65987a
/mongo-express-172.19.0.3
[node1] (local) root@192.168.0.8 ~
$ docker inspect -f '{{.Name}}-{{.NetworkSettings.Networks.mynet.IPAddress }}' e2ba199e8307
/mongodb01-172.19.0.2

Docker compose Tricks

We can have many combinations of containers togather to run within compose manifest file, as we discussed above two individual containers can be combined that is mongo and mongo-express will work as:
	
  version: '3.8'

services:
  mongodb:
    image: mongo
    container_name: mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin123
    ports:
      - "27017:27017"
    networks:
      - m-net

  mongo-express:
    image: mongo-express
    container_name: mongo-express
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: admin123
      ME_CONFIG_MONGODB_SERVER: mongodb
    ports:
      - "8081:8081"
    depends_on:
      - mongodb
    networks:
      - m-net

networks:
  m-net:
    driver: bridge
  
As we have difined simple bash macros/functions for docker-compose commands and their execution as follows:
docker compose run with bash alias
docker-compose run with bash alias 

Advanced tricks

Here we have advanced tricks where we explore the docker image save/load, docker diff, and docker stats commands, along with useful bash aliases to speed up your workflow.

The Save/load Docker images commands helps us for backup as tar archives.

	
 # Save an image to a tar file
docker image save -o image_backup.tar your_image:tag

# Load an image from a tar file
docker image load -i image_backup.tar

 
The bash alias can be defined with two arguments to a function as :
	
 alias dksave='function _dksave(){ docker image save -o "$2" "$1"; }; _dksave'
alias dkload='function _dkload(){ docker image load -i "$1"; }; _dkload'
 
Docker save example:
bash alias for docker save
bash alias for docker save command

Docker load example:
bash alias for docker load
bash alias for docker load command

What is your favorite docker trick?? Comment below! Hope you love this technical post please share with your team!

Comments

Popular posts from this blog

Ansible Jinja2 Templates: A Complete Guide with Examples

Ansible 11 The uri module with examples

Jenkins Active choices parameter - Dynamic input