Skip to content

Instantly share code, notes, and snippets.

@psenger
Created October 15, 2024 04:23
Show Gist options
  • Save psenger/383d8f50993856e4c8efdfde35f25404 to your computer and use it in GitHub Desktop.
Save psenger/383d8f50993856e4c8efdfde35f25404 to your computer and use it in GitHub Desktop.
[Docker Cheat Sheet] #Docker

Docker Cheat-sheet for Beginners 🐳

#webdev #docker #beginners #programming

πŸ”§ Common Docker Commands

  • Start Docker:
systemctl start docker  # Linux
open -a Docker  # macOS
  • Check Docker Version:
docker --version

πŸ“¦ Working with Containers

  • List Running Containers:
docker ps
  • List All Containers (Running + Stopped):
docker ps -a
  • Run a Container (starts and attaches):
docker run <image_name>
  • Run in Detached Mode:
docker run -d <image_name>
  • Run with Port Mapping:
docker run -p <host_port>:<container_port> <image_name>
  • Stop a Running Container:
docker stop <container_id>
  • Start a Stopped Container:
docker start <container_id>
  • Remove a Stopped Container:
docker rm <container_id>

πŸ“œ Images

  • List Docker Images:
docker images
  • Pull an Image from Docker Hub:
docker pull <image_name>
  • Build an Image from Dockerfile:
docker build -t <image_name> .
  • Tag an Image:
docker tag <image_id> <new_image_name>:<tag>
  • Remove an Image:
docker rmi <image_id>

πŸ”„ Container Management

  • View Logs of a Container:
docker logs <container_id>
  • Access a Running Container (Interactive Shell):
docker exec -it <container_id> /bin/bash
  • Copy Files from Container to Host:
docker cp <container_id>:<path_inside_container> <host_path>

πŸ— Docker Networks

  • List Networks:
docker network ls
  • Create a Network:
docker network create <network_name>
  • Connect a Running Container to a Network:
docker network connect <network_name> <container_id>

🐳 Docker Compose

  • Start Services in Detached Mode:
docker-compose up -d
  • Stop Services:
docker-compose down
  • Build and Start Containers:
docker-compose up --build

πŸ“Š Inspecting and Monitoring

  • Inspect Container Details:
docker inspect <container_id>
  • Display Resource Usage (CPU, Memory):
docker stats

πŸ›  Volumes

  • List Volumes:
docker volume ls
  • Create a Volume:
docker volume create <volume_name>
  • Mount a Volume (during docker run):
docker run -v <volume_name>:<path_inside_container> <image_name>

πŸ’‘ Pro Tip: Use docker system prune to remove unused containers, networks, and images.

Feel free to save or bookmark this cheat sheet for quick reference!

Docker #CheatSheet #Containers #DevOps

Helper Script

You can also make a helper script. Create a new file at the root folder called dc without extension. Here's an example content (modify for your needs):

#!/bin/bash
trap "exit" 0
DC="docker compose" # add  `-f docker/compose.yml` if it's in another folder
if [ $# -eq 0 ]; then
    $DC ps -a
elif [ $1 == "up" ]; then
    $DC up -d
elif [ $1 == "nr" ]; then
    if [ $# -gt 1 ]; then
        $DC exec node su node -c "${*:2}"
    else
        $DC exec node su node
    fi
elif [ $1 == "npm" ]; then
    $DC exec node su node -c "npm ${*:2}"
elif [ $1 == "install" ]; then
    $DC exec node su node -c 'npm install'
elif [ $1 == "recreate" ]; then
    $DC up -d --force-recreate ${*:2}
elif [ $1 == "build" ]; then
    $DC up -d --force-recreate --build ${*:2}
else
    $DC $*
fi

Give execute permission with chmod +x ./dc. Now you can run:

  • ./dc to show all containers with status
  • ./dc up to start in detached mode
  • ./dc install to run npm install in the node container as user node
  • ./dc npm install package-name-here to run any npm command inside node container. Works with ./dc npm run start too
  • ./dc nr interactive exec inside node container
  • ./dc nr node index.js run any command inside node container
  • ./dc recreate applies any modifications to docker-compose.yml
  • ./dc recreate node applies modifications to compose, only for node container
  • ./dc build if you have a custom dockerfile, does run dc up with a fresh build.
  • ./dc logs -n 10 -f node - any other docker-compose command works as expected.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment