Skip to content

🐳 Docker Commands and Practical Tips

A practical reference for Docker fundamentals, daily-use commands, and best practices.


πŸ“‘ Table of Contents

  1. Getting Started
  2. Docker Basics
  3. Managing Containers
  4. Managing Images
  5. Docker Networking
  6. Docker Volumes
  7. Dockerfile
  8. Docker Compose
  9. Docker Registry
  10. Monitoring & Debugging
  11. Docker-in-Docker & Docker Socket
  12. Best Practices

πŸš€ Getting Started

Ensure Docker is installed and running:

docker --version
docker info
````

Check Docker daemon status:

```bash
systemctl status docker

Test installation:

docker run hello-world

🧱 Docker Basics

Pull an Image

docker pull image-name:tag

Examples:

docker pull nginx
docker pull node:18

Run a Container

docker run -d -p host-port:container-port image-name:tag

Example:

docker run -d -p 8080:80 nginx

List Containers

docker ps        # running
docker ps -a     # all

Stop & Remove Containers

docker stop container-id
docker rm container-id

Force remove:

docker rm -f container-id

🧩 Managing Containers

Start / Restart Containers

docker start container-id
docker restart container-id

View Logs

docker logs container-id
docker logs -f container-id

Execute Inside Container

docker exec -it container-id bash

Alternative shells:

docker exec -it container-id sh

Inspect Container

docker inspect container-id

Rename Container

docker rename old-name new-name

πŸ–Ό Managing Images

List Images

docker images

Remove Images

docker rmi image-id
docker rmi -f image-id

Remove Dangling Images

docker image prune

Remove everything unused:

docker system prune -a

Tag an Image

docker tag source-image target-image

Example:

docker tag my-app myrepo/my-app:v1

🌐 Docker Networking

List Networks

docker network ls

Create Network

docker network create my-network

Connect Container to Network

docker network connect my-network container-name

Inspect Network

docker network inspect my-network

Remove Network

docker network rm my-network

πŸ’Ύ Docker Volumes

Create Volume

docker volume create my-volume

Mount Volume

docker run -d -v my-volume:/path/in/container image-name

Bind mount example:

docker run -v $(pwd):/app image-name

List Volumes

docker volume ls

Inspect Volume

docker volume inspect my-volume

Remove Volume

docker volume rm my-volume

πŸ“„ Dockerfile

Build Image

docker build -t my-image .

No cache build:

docker build --no-cache -t my-image .

Example Dockerfile

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

🧩 Docker Compose

Used for multi-container applications.

Start Services

docker-compose up -d

Stop Services

docker-compose down

View Logs

docker-compose logs
docker-compose logs -f

Scale Services

docker-compose up -d --scale service-name=3

Restart Services

docker-compose restart

πŸ“¦ Docker Registry

Login

docker login
docker login registry-url

Push Image

docker push registry-url/image-name:tag

Pull Image

docker pull registry-url/image-name:tag

πŸ“Š Monitoring & Debugging

Resource Usage

docker stats
docker stats container-id

Disk Usage

docker system df

Events (Debugging)

docker events

🐳 Docker-in-Docker & Docker Socket

πŸ”₯ Mounting Docker Socket (Very Important Concept)

docker run -it \
  -v /var/run/docker.sock:/var/run/docker.sock \
  docker-image:version \
  bash

❓ What This Does

  • Container can control host Docker
  • Can create, stop, delete containers
  • Used in CI/CD pipelines

⚠ Security Warning

Mounting Docker socket = root access to host

Use only when necessary.


Docker-in-Docker (DinD)

docker run --privileged docker:dind

Used for:

  • CI pipelines
  • Testing Docker builds

βœ… Best Practices

βœ” Use .dockerignore βœ” Use official base images βœ” Keep images small βœ” Don’t run containers as root βœ” Use volumes for data βœ” One process per container βœ” Pin image versions


🧠 Common Tips

  • Use --rm for temporary containers
docker run --rm image-name
  • Name containers
docker run --name my-container image-name
  • Limit resources
docker run --memory=512m --cpus=1 image-name

🎯 Final Notes

  • Docker Image = Blueprint
  • Docker Container = Running App
  • Dockerfile = Recipe
  • Docker Compose = Orchestrator (local)
  • Docker Registry = Storage