🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Được xuất bản

31 tháng 8, 2025

Docker là một nền tảng để chạy ứng dụng trong các container cách ly. Bảng tóm tắt này chứa các lệnh làm việc với image, container, network, volume, cũng như Docker Compose và Swarm.

📦 Lệnh cơ bản

Lệnh

Ví dụ

Mô tả

docker Lệnh CLI chính của Docker dùng để chạy các lệnh con và quản lý container, image, network và volume
docker version Hiển thị phiên bản Docker đã cài (client và server). Hữu ích để xác minh cài đặt
docker version --format '{{.Client.APIVersion}}'

Chỉ hiển thị phiên bản API của Docker client

docker version --format '{{.Server.Version}}'

Chỉ hiển thị phiên bản Docker server (Engine)

docker version --format '{{json .}}'

Xuất thông tin phiên bản đầy đủ ở định dạng JSON

docker system info Hiển thị thông tin chung về hệ thống Docker: số lượng container, image, tài nguyên
docker info

Hiển thị dữ liệu Docker: phiên bản, mạng, số lượng container và image

docker info --format '{{json .}}'

Xuất thông tin ở định dạng JSON — hữu ích cho tự động hóa

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

Hiển thị số CPU và tổng bộ nhớ

docker info --format '{{.Driver}}'

Hiển thị trình điều khiển lưu trữ mà Docker đang sử dụng

docker image pull Tải image từ Docker Hub hoặc registry khác. Container không thể chạy nếu không có image
docker pull ubuntu

Tải image Ubuntu mới nhất

docker pull nginx:alpine

Tải image Nginx nhẹ dựa trên Alpine Linux

docker pull redis:7

Tải image Redis phiên bản 7

docker container run Tạo và chạy container mới từ image
docker run -it ubuntu bash

Chạy Ubuntu với terminal Bash tương tác

docker run -d nginx

Chạy Nginx ở chế độ nền (detached)

docker run -p 8080:80 nginx

Chạy Nginx và ánh xạ cổng 80 của container sang cổng 8080 của host

docker container ls Liệt kê container đang chạy
docker ps

Hiển thị chỉ các container đang chạy

docker ps -a

Hiển thị tất cả container, bao gồm cả đã dừng

docker ps --format '{{.Names}}'

Chỉ xuất tên container

docker container start Khởi động một hoặc nhiều container đã dừng
docker start container_name

Khởi động container theo tên

docker start $(docker ps -aq)

Khởi động tất cả container

docker start -ai container_name

Khởi động container và gắn terminal tương tác

docker container stop Dừng một container đang chạy
docker stop container_name

Dừng container theo tên

docker stop $(docker ps -q)

Dừng tất cả container đang chạy

docker stop -t 5 container_name

Dừng container và cho 5 giây để kết thúc tiến trình

docker container restart Khởi động lại container
docker restart container_name

Khởi động lại container cụ thể

docker restart $(docker ps -q)

Khởi động lại tất cả container đang chạy

docker restart -t 10 container_name

Khởi động lại container với độ trễ 10 giây

docker container rm Xóa container
docker rm container_name

Xóa container đã dừng cụ thể

docker rm $(docker ps -aq)

Xóa tất cả container đã dừng

docker rm -f container_name

Buộc xóa container đang chạy

docker image ls Liệt kê các image đã tải về
docker images

Hiển thị tất cả image trên host

docker images -a

Hiển thị tất cả image, bao gồm cả lớp trung gian

docker images --format '{{.Repository}}:{{.Tag}}'

Chỉ xuất tên và tag của image

docker image rm Xóa một hoặc nhiều image khỏi bộ nhớ cục bộ
docker rmi test1:latest

Xóa image với tag latest từ repository test1

docker rmi 1a2b3c4d5e6f

Xóa image theo ID

docker rmi $(docker images -q)

Xóa tất cả image (sử dụng cẩn thận!)

🔁 Quản lý Container

Lệnh

Ví dụ

Mô tả

docker container exec Chạy lệnh bên trong container đang chạy
docker exec -it container bash

Mở shell bash tương tác bên trong container tên container

docker exec container ls /app

Thực thi lệnh ls trong thư mục /app bên trong container

docker exec -d container touch /tmp/testfile

Chạy lệnh trong container ở chế độ nền (không chờ)

docker container logs Xem log của container
docker logs container

Hiển thị tất cả log từ container container

docker logs -f container

Theo dõi log container theo thời gian thực

docker logs --tail 50 container

Hiển thị 50 dòng log cuối

docker inspect Lấy thông tin chi tiết JSON về container hoặc image
docker inspect container

Hiển thị chi tiết container container

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

Hiển thị địa chỉ IP của container

docker container stats Hiển thị thống kê sử dụng tài nguyên của container theo thời gian thực
docker stats

Hiển thị CPU, bộ nhớ, mạng và đĩa của tất cả container

docker stats container_name

Chỉ hiển thị thống kê cho container cụ thể

docker stats --no-stream

Hiển thị một lần snapshot thống kê rồi thoát

docker container rename Đổi tên container
docker rename old_name new_name

Đổi tên container từ old_name thành new_name

docker container cp Sao chép tệp giữa container và host
docker cp container:/src/file.txt ./file.txt

Sao chép tệp từ container sang thư mục hiện tại trên host

docker cp ./config.yaml container:/app/config.yaml

Sao chép tệp từ host sang container

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

Truyền file log từ container và lọc dòng “ERROR” mà không lưu vào đĩa

docker container top Hiển thị tiến trình đang chạy bên trong container
docker top container

Hiển thị tiến trình của container tên container

docker container pause Tạm dừng tất cả tiến trình trong container
docker pause container

Tạm dừng container container

docker container unpause Tiếp tục container đã bị tạm dừng
docker unpause container

Tiếp tục container container

docker container update Cập nhật thiết lập container mà không cần khởi động lại
docker update --memory 500m container

Giới hạn bộ nhớ container ở 500 MB

🧱 Image và Dockerfile

Lệnh

Ví dụ

Mô tả

docker buildx build Build image Docker từ Dockerfile
docker build -t my_image .

Build image gắn tag my_image từ thư mục hiện tại

docker build -t my_image:1.0 .

Build image gắn tag phiên bản 1.0

docker build --no-cache -t my_image .

Build image không sử dụng cache để clean build

docker container commit Tạo image từ trạng thái hiện tại của container
docker commit container my_img:v1

Tạo image my_img với tag v1 từ container container

docker commit -m "Added config" container my_img:v2

Tạo image với thông điệp commit

docker commit -a "John Doe" container my_img:latest

Tạo image với thông tin tác giả

docker image tag Thêm hoặc thay đổi tag của image
docker tag my_image myrepo/my_image:latest

Thêm tag để push lên registry myrepo

docker tag my_image:1.0 my_image:stable

Tạo tag stable cho image tag 1.0

docker tag my_image my_image:backup

Thêm tag backup cho image cục bộ

docker image push Push image lên Docker Hub hoặc registry khác
docker push myrepo/my_image:latest

Push image với tag latest lên repository myrepo

docker push myrepo/my_image:1.0

Push image với tag 1.0

docker push myrepo/my_image

Push image với tag mặc định latest

docker login Xác thực vào Docker Hub hoặc registry khác
docker login

Nhập tên và mật khẩu thủ công cho Docker Hub

docker login myregistry.local:5000

Đăng nhập vào registry riêng

docker login -u username -p password

Đăng nhập bằng tên và mật khẩu (không khuyến nghị)

docker logout Đăng xuất khỏi Docker Hub hoặc registry khác
docker logout

Đăng xuất khỏi Docker Hub

docker logout myregistry.local:5000

Đăng xuất khỏi registry riêng

HEALTHCHECK Chỉ thị Dockerfile để kiểm tra tình trạng container tự động
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

Thêm health check để kiểm tra dịch vụ mỗi 30 giây

docker inspect --format='{{json .State.Health}}' container_name

Kiểm tra trạng thái healthcheck của container đang chạy

🔌 Mạng và Volume

Lệnh

Ví dụ

Mô tả

docker network ls Liệt kê tất cả mạng Docker
docker network ls

Hiển thị tất cả mạng đã tạo

docker network ls --filter driver=bridge

Hiển thị chỉ các mạng dùng driver bridge

docker network ls --format '{{.Name}}'

Chỉ hiển thị tên mạng

docker network create Tạo mạng Docker mới
docker network create my_net

Tạo mạng tên my_net với thiết lập mặc định

docker network create --driver bridge my_bridge_net

Tạo mạng với driver bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

Tạo mạng với subnet chỉ định

docker network connect Kết nối container vào mạng
docker network connect my_net container

Kết nối container tên container vào mạng my_net

docker network connect --alias db_net my_net container

Kết nối với alias db_net

docker network disconnect Ngắt kết nối container khỏi mạng
docker network disconnect my_net container

Ngắt container container khỏi mạng my_net

docker volume ls Liệt kê tất cả volume Docker
docker volume ls

Hiển thị tất cả volume

docker volume ls --filter dangling=true

Hiển thị volume chưa dùng

docker volume create Tạo volume mới
docker volume create my_vol

Tạo volume tên my_vol

docker volume create --driver local --opt type=tmpfs my_tmp_vol

Tạo volume tạm bằng tmpfs

docker volume inspect Hiển thị thông tin chi tiết về volume
docker volume inspect my_vol

Hiển thị chi tiết volume my_vol ở định dạng JSON

docker volume rm Xóa một hoặc nhiều volume
docker volume rm my_vol

Xóa volume tên my_vol

docker volume rm $(docker volume ls -qf dangling=true)

Xóa tất cả volume chưa dùng

🧩 Plugin Docker

Lệnh

Ví dụ

Mô tả

docker plugin ls Liệt kê plugin Docker đã cài
docker plugin ls

Hiển thị tất cả plugin và trạng thái

docker plugin install Cài plugin Docker từ registry
docker plugin install vieux/sshfs

Cài plugin volume SSHFS

docker plugin install store/weaveworks/net-plugin:latest_release

Cài plugin mạng Weave

docker plugin disable Vô hiệu hóa plugin đã cài
docker plugin disable vieux/sshfs

Vô hiệu hóa plugin SSHFS

docker plugin enable Kích hoạt plugin đã vô hiệu hóa
docker plugin enable vieux/sshfs

Kích hoạt plugin SSHFS

docker plugin rm Xóa plugin Docker
docker plugin rm vieux/sshfs

Xóa plugin SSHFS

📋 Docker Compose

Lệnh

Ví dụ

Mô tả

docker compose up Khởi động container định nghĩa trong docker-compose.yml
docker compose up

Khởi động tất cả service trong thư mục hiện tại ở chế độ tương tác

docker compose up -d

Khởi động service ở chế độ nền (detached)

docker compose up --build

Build image trước khi khởi động service

docker compose down Dừng và xóa container, network và volume được tạo bởi up
docker compose down

Dừng tất cả service đang chạy và xóa tài nguyên liên quan

docker compose down --volumes

Xóa cả volume được Compose tạo

docker compose down --rmi all

Xóa cả image được Compose tạo

docker compose logs Xem log của tất cả hoặc service cụ thể
docker compose logs

Hiển thị log của tất cả service

docker compose logs -f

Theo dõi log theo thời gian thực

docker compose logs web

Hiển thị log của service web

docker compose exec Chạy lệnh bên trong container của service đang chạy
docker compose exec web bash

Mở bash shell tương tác bên trong container service web

docker compose exec db ls /var/lib/postgresql

Chạy lệnh ls trong container database

docker compose exec -d worker touch /tmp/done

Chạy lệnh trong container worker ở chế độ nền

docker compose build Build hoặc rebuild image service
docker compose build

Build tất cả image trong docker-compose.yml

docker compose build web

Build chỉ image của service web

docker compose build --no-cache

Build image không dùng cache

docker compose ps Hiển thị trạng thái của tất cả service và container
docker compose ps -a

Hiển thị tất cả container, kể cả đã dừng

docker compose ps --services

Chỉ hiển thị tên service

docker compose pull Tải/cập nhật image service từ registry
docker compose pull web

Tải image chỉ cho service web

docker compose pull --ignore-pull-failures

Tiếp tục tải ngay cả khi một số image bị lỗi

docker compose restart Khởi động lại tất cả hoặc service cụ thể
docker compose restart db

Khởi động lại chỉ service db

docker compose restart -t 10

Khởi động lại service với timeout 10 giây

docker compose config Hiển thị cấu hình Compose cuối cùng ở định dạng YAML
docker compose config --services

Liệt kê tất cả service trong cấu hình

docker compose config --volumes

Liệt kê tất cả volume trong cấu hình

docker compose start Khởi động service đã dừng mà không tạo lại container
docker compose start web

Khởi động service web

docker compose start db api

Khởi động nhiều service cùng lúc

docker compose stop Dừng service mà không xóa container
docker compose stop web

Dừng service web

docker compose stop -t 5

Dừng service với timeout 5 giây

📤 Xuất và Nhập

Lệnh

Ví dụ

Mô tả

docker image save Lưu một hoặc nhiều Docker image thành tar archive để nhập hoặc truyền sau này
docker save -o image.tar my_img:tag

Lưu Docker image vào tệp tar archive

docker save my_image > my_image.tar

Cách khác để lưu image vào tệp

docker save -o redis_latest.tar redis:latest

Lưu image Redis cụ thể vào tệp

docker image load Tải Docker image từ tar archive đã lưu trước đó
docker load < image.tar

Tải Docker image từ tệp tar archive

docker load --input redis_latest.tar

Tải image bằng cách chỉ định tệp qua tham số

docker load --quiet < my_image.tar

Tải image không hiển thị tiến trình

docker container export Xuất filesystem của container thành tar archive mà không có lịch sử hoặc metadata của image
docker export container > file.tar

Xuất filesystem container thành archive

docker export my_container > my_container_fs.tar

Xuất container theo tên

docker export -o container_fs.tar container_id

Xuất bằng ID container với cờ -o

docker image import Tạo image mới từ tar archive của filesystem
docker import file.tar new_img

Nhập tệp archive thành Docker image mới

docker import https://example.com/image.tar my_new_image

Nhập image trực tiếp từ URL

docker import - my_image < file.tar

Nhập từ standard input

🧹 Dọn dẹp và Chẩn đoán

Lệnh

Ví dụ

Mô tả

docker system df Hiển thị mức sử dụng đĩa Docker: volume, image, container và build cache
docker system df -v

Output chi tiết với thông tin về từng image, container và volume

docker system df --format '{{json .}}'

Xuất thông tin ở định dạng JSON

docker system prune Xóa tất cả dữ liệu Docker không dùng: container đã dừng, network không dùng, image treo và build cache
docker system prune -a

Xóa image không dùng bao gồm cả lớp trung gian

docker system prune --volumes

Xóa volume không dùng cùng với các tài nguyên khác

docker image prune Xóa image Docker không dùng bao gồm cả lớp treo
docker image prune -a

Xóa tất cả image không dùng bao gồm cả lớp treo

docker image prune --filter "until=24h"

Xóa image cũ hơn 24 giờ

docker container prune Xóa container đã dừng theo bộ lọc hoặc tất cả nếu không chỉ định
docker container prune --filter "until=24h"

Xóa container đã dừng lâu hơn 24 giờ

docker container prune --force

Xóa mà không cần xác nhận

🐝 Docker Swarm

Lệnh

Ví dụ

Mô tả

docker swarm init Khởi tạo cụm Docker Swarm mới trên node hiện tại
docker swarm init --advertise-addr 192.168.1.100

Khởi tạo cụm với địa chỉ IP chỉ định

docker swarm init --listen-addr 0.0.0.0:2377

Khởi tạo với cổng listen chỉ định

docker service create Tạo service mới trong cụm Swarm
docker service create --name nginx nginx

Tạo service Nginx trong Swarm

docker service create --replicas 3 --name web webserver

Tạo service với 3 replica

docker service create --name redis --publish 6379:6379 redis

Tạo service với ánh xạ cổng

docker stack deploy Triển khai stack service vào cụm Swarm dựa trên tệp Compose
docker stack deploy -c docker-compose.yml mystack

Triển khai stack từ tệp compose

docker stack deploy --with-registry-auth -c compose.yml mystack

Triển khai với chuyển tiếp xác thực registry

docker stack deploy -c swarm-compose.yml mystack

Dùng tệp compose thay thế cho stack

docker stack rm Xóa một hoặc nhiều stack khỏi cụm Swarm
docker stack rm mystack

Xóa stack mystack

docker stack rm

Xóa tất cả stack (không khuyến nghị)

docker stack rm mystack && docker swarm leave --force

Xóa stack và rời khỏi Swarm

💼 Sử dụng Docker nâng cao

🚀 Lệnh Docker chuyên nghiệp

Lệnh

Ví dụ

Mô tả

docker buildx Công cụ build image nâng cao thay thế docker build. Hỗ trợ đa nền tảng, cache, build song song và xuất sang nhiều định dạng. Hữu ích cho CI/CD và phát triển đa nền tảng
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

Build image đa nền tảng (ARM và x86 đồng thời)

docker buildx build --load -t localimg .

Build image và nạp vào cache Docker Engine cục bộ

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

Build và push image đa nền tảng lên registry

docker context Quản lý context Docker để làm việc với môi trường từ xa hoặc nhiều môi trường. Cho phép chuyển đổi nhanh giữa Docker Engine cục bộ và từ xa
docker context create myremote --docker "host=ssh://user@host"

Tạo context để kết nối tới Docker host từ xa

docker context use myremote

Chuyển sang context từ xa

docker context ls

Liệt kê context khả dụng và context đang dùng

docker system events Nghe sự kiện Docker theo thời gian thực, có thể lọc theo loại sự kiện (vd: container start). Hữu ích cho giám sát và tự động hóa
docker events --filter 'event=start'

Chỉ hiển thị sự kiện container start

docker events --since 1h --until 10m

Hiển thị sự kiện từ 1 giờ trước đến 10 phút trước

docker events --filter 'type=network'

Chỉ hiển thị sự kiện liên quan tới mạng

docker events --filter 'image=nginx'

Hiển thị sự kiện liên quan đến image nginx

docker container update Thay đổi giới hạn tài nguyên và cài đặt của container đang chạy mà không cần khởi động lại
docker update --cpus 2 --memory 1g my_container

Đặt giới hạn 2 CPU và 1 GB RAM

docker update --restart unless-stopped my_container

Đặt chính sách tự động khởi động lại thành unless-stopped

docker update --pids-limit 200 my_container

Giới hạn số tiến trình ở mức 200

docker container diff Hiển thị thay đổi filesystem trong container so với image gốc. Hữu ích để debug và audit
docker diff my_container

Hiển thị tất cả thay đổi filesystem trong container

docker diff my_container | grep '^A'

Chỉ hiển thị tệp được thêm (A — Added)

docker image history Hiển thị lịch sử layer của image: lệnh build, kích thước từng layer và thời gian tạo. Hữu ích cho tối ưu hóa và audit
docker history my_image

Hiển thị lịch sử layer của image

docker history --no-trunc my_image

Hiển thị lệnh build đầy đủ không bị cắt

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

Chỉ xuất lệnh build và kích thước layer

🛠 Thực tiễn và Tự động hóa Docker

  • Giảm kích thước image
    Dùng base image như alpine hoặc scratch để giảm kích thước.
    Để gộp layer, có thể dùng --squash khi build (cần bật tính năng thử nghiệm).
    Ngoài ra, xóa tệp tạm và cache trong một layer duy nhất:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • Giảm số lượng layer
    Kết hợp các lệnh trong một RUN để giảm số lượng layer và kích thước image cuối cùng:

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • Tối ưu build Dockerfile
    Dùng multi-stage build để chỉ giữ lại tệp cần thiết trong image cuối.
    Copy và cài dependency trước, sau đó copy code — giúp cải thiện cache layer và tăng tốc rebuild.

  • Tách bí mật và cấu hình
    Không bao giờ lưu .env, API key hoặc chứng chỉ riêng trong image.
    Dùng để cấu hình:

    • docker secret (trong Swarm)
    • biến môi trường (-e VAR=value hoặc .env)
    • volume ngoài cho config

  • Secret khi build (BuildKit)
    Để truyền secret an toàn khi build, dùng cờ --secret:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    Trong Dockerfile, secret khả dụng tại /run/secrets/mysecret:

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    🛡 Điều này ngăn secret bị lưu trong layer image.

  • Rootless Docker
    Chạy Docker không cần quyền root cải thiện bảo mật và giảm rủi ro compromise host.
    Để bật:

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    Kiểm tra:

    docker info | grep Rootless

    ⚠ Một số tính năng (vd: chuyển tiếp cổng <1024) sẽ không khả dụng.

  • Quét image tìm lỗ hổng
    Dùng công cụ tích hợp sẵn:

    docker scan my_image

    Hoặc CLI mới:

    docker scout cves my_image

    Điều này giúp phát hiện lỗ hổng trong base image và dependency.

  • Giám sát tài nguyên
    Giới hạn container theo bộ nhớ, CPU và số tiến trình:

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    Điều này ngăn tiêu thụ tài nguyên quá mức.
    Có thể giới hạn cả I/O:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    Hữu ích cho container không nên quá tải hệ thống đĩa.

  • Tự động dọn dẹp
    Thường xuyên xóa image, container, volume và network không dùng:

    docker system prune -af --volumes

    ⚠ Cẩn thận: lệnh này sẽ xóa tất cả tài nguyên không dùng.

    Để dọn selective, dùng:

    docker image prune --filter "until=24h"
  • Tích hợp CI/CD
    Nhúng build, test và deploy vào GitHub Actions, GitLab CI, Jenkins pipeline.
    Ví dụ bước GitHub Actions:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • Logging và giám sát
    Gắn logging driver (--log-driver) tới hệ thống tập trung: ELK, Loki, Splunk.
    Dùng Prometheus + cAdvisor cho metrics container.

  • Triển khai Production
    Tách cấu hình cho development và production bằng docker-compose.override.yml.
    Để high availability và scaling dùng:

    • Docker Swarm
    • Kubernetes

🐞 Debug và Profiling Docker Container

Lệnh

Ví dụ

Mô tả

docker container exec Chạy lệnh bên trong container đang chạy, cung cấp truy cập tương tác hoặc khả năng chạy tiến trình trong môi trường cách ly
docker exec -it my_container bash

Mở terminal tương tác (bash) bên trong container đang chạy

docker exec -it my_container sh

Mở shell tối giản bên trong container (nếu bash không có)

docker exec my_container ls /app

Chạy lệnh trong container không ở chế độ tương tác

docker container logs Hiển thị log của container cụ thể, cho phép xem output và sự kiện liên quan để chẩn đoán và giám sát
docker logs -f --tail 100 my_container

Xem 100 dòng log cuối với stream theo thời gian thực

docker logs my_container

Hiển thị tất cả log của container

docker logs --since 1h my_container

Hiển thị log của 1 giờ qua

docker inspect Xuất thông tin chi tiết về đối tượng Docker (container, image, network, v.v.) ở định dạng JSON, bao gồm cấu hình và trạng thái
docker inspect my_container

Lấy toàn bộ JSON info của container

docker inspect --format '{{.State.Pid}}' my_container

Lấy PID của tiến trình chính trong host

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

Hiển thị địa chỉ IP của container

nsenter (with strace) Tiện ích Linux để vào namespace của tiến trình khác (ở đây là container). Dùng với strace để theo dõi syscall bên trong container khi debug
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

Vào namespace container và trace syscall của process 1

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

Mở bash shell trong namespace container

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

Xem cổng mở trong container

tcpdump (inside container) Công cụ console để bắt và phân tích traffic mạng. Dùng trong container để chẩn đoán sự cố mạng, phân tích gói tin và giám sát kết nối
docker exec -it my_container tcpdump -i any

Bắt và phân tích traffic mạng bên trong container

docker exec -it my_container tcpdump -nn port 80

Bắt traffic chỉ trên cổng 80

docker exec -it my_container tcpdump -w /tmp/dump.pcap

Lưu traffic vào file để phân tích sau

docker container stats Hiển thị số liệu sử dụng tài nguyên (CPU, bộ nhớ, mạng, đĩa) của 1 hoặc nhiều container theo thời gian thực
docker stats my_container

Hiển thị CPU, bộ nhớ, mạng và đĩa theo thời gian thực của container

docker stats

Hiển thị thống kê cho tất cả container

docker stats --no-stream

Xuất thống kê một lần rồi thoát

docker container top Hiển thị danh sách tiến trình chạy bên trong container, tương tự ps trong Linux, để phân tích hoạt động container
docker top my_container

Hiển thị tiến trình chạy trong container

docker top my_container aux

Dùng định dạng output khác như ps aux

docker top my_container -eo pid,cmd

Chỉ hiển thị PID và lệnh của tiến trình

docker diff Hiển thị thay đổi trong filesystem của container so với image gốc, chỉ ra tệp thêm, thay đổi hoặc xóa
docker diff my_container

Hiển thị thay đổi filesystem của container so với image gốc

docker diff my_container | grep '^A'

Chỉ hiển thị tệp thêm (A — Added)

docker diff my_container | grep '^C'

Chỉ hiển thị tệp thay đổi (C — Changed)

docker cp Sao chép tệp và thư mục giữa container và host, cho phép trao đổi dữ liệu và backup
docker cp my_container:/path/to/file ./file

Sao chép tệp từ container sang host

docker cp ./config.yaml my_container:/app/config.yaml

Sao chép tệp từ host vào container

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

Sao chép file log và lọc dòng lỗi mà không lưu vào đĩa

💡 Để debug nâng cao, bạn có thể dùng nsenter, strace, tcpdump, gdb và các công cụ low-level khác.

💼 Sử dụng Docker Compose nâng cao

🚀 Lệnh Docker Compose chuyên nghiệp

Lệnh

Ví dụ

Mô tả

docker compose up Khởi động và quản lý vòng đời của các service từ tệp docker-compose.yml với khả năng chạy ở chế độ nền
docker compose up -d web db

Chạy chỉ các service webdb ở chế độ nền

docker compose up --build

Build lại image trước khi khởi động service

docker compose up --remove-orphans

Xóa container không được định nghĩa trong tệp compose hiện tại

docker compose build Build image cho các service như được mô tả trong tệp compose với kiểm soát cache và song song
docker compose build --no-cache

Build lại hoàn toàn image mà không sử dụng cache

docker compose build --parallel

Build tất cả service đồng thời để tăng tốc

docker compose build web

Build image chỉ cho service web

docker compose pull Tải phiên bản mới nhất của image từ registry cho tất cả hoặc service chỉ định
docker compose pull

Pull image cho tất cả service

docker compose pull db

Pull image chỉ cho service db

docker compose pull --ignore-pull-failures

Tiếp tục thực thi và bỏ qua lỗi khi pull image

docker compose restart Khởi động lại tất cả hoặc service chỉ định mà không tạo lại container
docker compose restart

Khởi động lại tất cả service trong project hiện tại

docker compose restart worker

Khởi động lại chỉ service worker

docker compose restart web db

Khởi động lại nhiều service cùng lúc

docker compose exec Thực thi lệnh bên trong container của service đang chạy với tùy chọn chế độ tương tác
docker compose exec db psql -U user -d database

Chạy psql bên trong container service db

docker compose exec web sh

Mở shell trong container web

docker compose exec api curl http://localhost:8080

Thực thi yêu cầu curl từ container service api

docker compose config Xuất cấu hình Compose cuối cùng xét tất cả tệp và biến môi trường
docker compose config

Hiển thị cấu hình hợp nhất ở định dạng YAML

docker compose config --services

Liệt kê tất cả service

docker compose config --environment

Hiển thị tất cả biến môi trường được sử dụng bởi service

docker compose watch Tự động khởi động lại service khi tệp nguồn thay đổi, hữu ích cho phát triển
docker compose watch

Bắt đầu theo dõi tệp và khởi động lại service khi thay đổi

docker compose events Stream sự kiện Compose: service start, stop, update
docker compose events --json

Nhận sự kiện ở định dạng JSON

docker compose rm Xóa container service đã dừng
docker compose rm web db

Xóa container của service webdb

docker compose pause Tạm dừng hoạt động service
docker compose pause api

Tạm dừng service api

docker compose unpause Tiếp tục service đã tạm dừng
docker compose unpause api

Tiếp tục service api

docker compose create Tạo container nhưng không khởi động
docker compose create web db

Tạo container cho webdb nhưng không khởi động

docker compose images Hiển thị danh sách image được sử dụng bởi service
docker compose images

Hiển thị image của tất cả service

docker compose top Hiển thị tiến trình đang chạy bên trong container của service
docker compose top web

Hiển thị tiến trình trong container của service web

🛠 Thực tiễn và Tự động hóa hữu ích với Docker Compose

  • Tách môi trường
    Dùng các tệp docker-compose.override.yml riêng cho từng môi trường — development, staging, production. Điều này giúp cô lập cấu hình và tránh xung đột.
    Bạn cũng có thể kết hợp nhiều tệp config bằng cờ -f:

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    Sử dụng các tệp .env khác nhau (.env.dev, .env.prod, v.v.) để quản lý biến môi trường.

  • Lưu trữ bí mật an toàn
    Không đưa dữ liệu nhạy cảm (mật khẩu, token) trực tiếp vào tệp Compose. Thay vào đó, sử dụng:

    • Tệp .env cho biến môi trường (lưu ý rằng .env không được mã hóa và không nên commit vào repo công khai)
    • docker secretdocker config để quản lý bí mật và cấu hình an toàn trong Docker Swarm
    • volume ngoài cho tệp cấu hình chứa bí mật
    • hệ thống quản lý bí mật bên ngoài (ví dụ: HashiCorp Vault, AWS Secrets Manager)

  • Thứ tự khởi động với depends_onhealthcheck
    Để service đợi khi phụ thuộc sẵn sàng:

    services:
      db:
        image: postgres
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          retries: 5
      api:
        image: my_api
        depends_on:
          db:
            condition: service_healthy
  • Giảm thiểu downtime khi cập nhật
    Trước khi cập nhật service, chạy:

    docker compose pull && docker compose up -d --remove-orphans

    Tùy chọn -d chạy container ở chế độ nền, và --remove-orphans xóa container không được định nghĩa trong config hiện tại.
    Để dừng hoàn toàn và xóa container cũ khi cần:

    docker compose down --remove-orphans

    Điều này đảm bảo image mới được nạp và container không dùng bị xóa mà không downtime.

  • Hot Reload code cho phát triển
    Dùng volumes để mount thư mục local vào container. Điều này cho phép áp dụng thay đổi code ngay lập tức mà không cần build lại image.
    Cẩn thận với vấn đề quyền file và cache filesystem, đặc biệt trên Windows và macOS, để tránh sự cố hiệu suất.

  • Hot Reload code không cần volume (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • Ghi log tập trung cho service
    Chuyển hướng log container đến hệ thống giám sát và tập hợp log như ELK Stack, Loki, Prometheus và Fluentd để dễ phân tích và cảnh báo.
    Dùng logging driver của Docker (--log-driver) để kích hoạt tập trung log.
    Cấu hình logging driver cho container trong Compose:

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • Tự động khởi động lại service
    Cấu hình chính sách restart trong docker-compose.yml:

    restart: unless-stopped

    Các chính sách restart khác gồm:

    • no — không tự động khởi động lại (mặc định)
    • always — luôn khởi động lại container
    • on-failure — khởi động lại chỉ khi lỗi (có thể kèm số lần thử)

    Trong production, unless-stopped là lựa chọn tối ưu để đảm bảo khả năng phục hồi.
    Điều này giúp dịch vụ tự động khôi phục sau sự cố hoặc khi host khởi động lại.

  • Profile của service
    Cho phép chạy chỉ nhóm service cụ thể:

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    Để chạy chỉ profile frontend:

    docker compose --profile frontend up

🐞 Debug và Profiling service trong Docker Compose

Lệnh

Ví dụ

Mô tả

docker compose exec Thực thi lệnh trong service đang chạy, cung cấp truy cập container hoặc chạy tiến trình riêng lẻ
docker compose exec web sh

Mở shell bên trong container của service web

docker compose exec db psql -U user -d database

Chạy lệnh psql trong container service db

docker compose logs Xem log service để chẩn đoán và giám sát
docker compose logs -f db

Xem log service db theo thời gian thực

docker compose logs --tail=50 api

Hiển thị 50 dòng log cuối từ service api

docker compose logs --since=1h web

Hiển thị log 1 giờ qua của service web

docker inspect Xem thông tin chi tiết về container chạy service
docker inspect $(docker compose ps -q web)

Lấy JSON với thông tin chi tiết về container service web

docker container stats Giám sát việc sử dụng tài nguyên của container chạy service
docker stats $(docker compose ps -q worker)

Theo dõi CPU, bộ nhớ và tài nguyên khác cho container service worker

docker compose run --rm Chạy container tạm thời với cấu hình service, hữu ích để debug
docker compose run --rm web sh

Khởi động container một lần cho service web với shell tương tác

docker container cp Sao chép tệp giữa host và container
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

Sao chép tệp từ container service db sang host

💡 Để debug tiện lợi cho hệ thống nhiều service phức tạp, dùng docker compose run --rm để khởi chạy container riêng với network và volume cần thiết mà không ảnh hưởng đến service chính.

📚 Tài nguyên bổ sung

🚫 Bỏ qua tệp với .dockerignore

Thêm tệp và thư mục vào .dockerignore để không đưa vào image nhằm giảm kích thước và tăng tốc build:

node_modules/
*.log
.env

⚡ Đơn giản hóa lệnh với alias

Bạn có thể tạo alias cho lệnh dùng thường xuyên để chạy nhanh hơn:

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

🧠 Mẹo: Lời khuyên khi dùng Docker

  • Đừng cố ghi nhớ tất cả — hãy dùng docker --help hoặc docker <command> --help để khám phá lệnh.
  • Thực hành thường xuyên và thử nghiệm với project đơn giản.
  • Theo dõi kích thước image và loại bỏ tệp không cần qua .dockerignore.

🌐 Liên kết hữu ích

📘 Tài liệu Docker chính thức — hướng dẫn và tham khảo toàn diện về tất cả chủ đề Docker:
https://docs.docker.com/

📙 Docker Cheat Sheet — bảng tóm tắt chính thức đầy đủ về Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/

📗 Docker Hub — image và registry:
https://hub.docker.com/