🐳 Docker
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  | |
| 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  | |
| docker exec container ls /app | Thực thi lệnh  | |
| 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  | |
| 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  | |
| 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ừ  | |
| 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  | |
| docker container pause | Tạm dừng tất cả tiến trình trong container | |
| docker pause container | Tạm dừng container  | |
| docker container unpause | Tiếp tục container đã bị tạm dừng | |
| docker unpause container | Tiếp tục 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  | |
| docker build -t my_image:1.0 . | Build image gắn tag phiên bản  | |
| 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  | |
| 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  | |
| docker tag my_image:1.0 my_image:stable | Tạo tag  | |
| docker tag my_image my_image:backup | Thêm tag  | |
| 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  | |
| docker push myrepo/my_image:1.0 | Push image với tag  | |
| docker push myrepo/my_image | Push image với tag mặc định  | |
| 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  | |
| 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  | |
| docker network create --driver bridge my_bridge_net | Tạo mạng với driver  | |
| 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  | |
| docker network connect --alias db_net my_net container | Kết nối với alias  | |
| docker network disconnect | Ngắt kết nối container khỏi mạng | |
| docker network disconnect my_net container | Ngắt container  | |
| 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  | |
| 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  | |
| docker volume rm | Xóa một hoặc nhiều volume | |
| docker volume rm my_vol | Xóa volume tên  | |
| 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  | |
| 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  | |
| docker compose exec db ls /var/lib/postgresql | Chạy lệnh  | |
| docker compose exec -d worker touch /tmp/done | Chạy lệnh trong container  | |
| docker compose build | Build hoặc rebuild image service | |
| docker compose build | Build tất cả image trong  | |
| docker compose build web | Build chỉ image của service  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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ờ  | |
| 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  | |
| 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  | |
| 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  | |
| 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 ( | |
| 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ư- alpinehoặc- scratchđể giảm kích thước.
 Để gộp layer, có thể dùng- --squashkhi 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=valuehoặ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 
 
- Docker Swarm
🐞 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(withstrace) | 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ự pstrong 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ư  | |
| 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 ( | |
| docker diff my_container | grep '^C' | Chỉ hiển thị tệp thay đổi ( | |
| 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,gdbvà 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| docker compose exec web sh | Mở shell trong container  | |
| docker compose exec api curl http://localhost:8080 | Thực thi yêu cầu curl từ container service  | |
| 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  | |
| docker compose pause | Tạm dừng hoạt động service | |
| docker compose pause api | Tạm dừng service  | |
| docker compose unpause | Tiếp tục service đã tạm dừng | |
| docker compose unpause api | Tiếp tục service  | |
| docker compose create | Tạo container nhưng không khởi động | |
| docker compose create web db | Tạo container cho  | |
| 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  | 
🛠 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.ymlriê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 - .envkhá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 .envcho biến môi trường (lưu ý rằng.envkhông được mã hóa và không nên commit vào repo công khai)
 
- docker secretvà- docker 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) 
 
- Tệp 
- Thứ tự khởi động với - depends_onvà- healthcheck
 Để 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 - -dchạy container ở chế độ nền, và- --remove-orphansxó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-stoppedlà 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  | |
| docker compose exec db psql -U user -d database | Chạy lệnh psql trong container service  | |
| docker compose logs | Xem log service để chẩn đoán và giám sát | |
| docker compose logs -f db | Xem log service  | |
| docker compose logs --tail=50 api | Hiển thị 50 dòng log cuối từ service  | |
| docker compose logs --since=1h web | Hiển thị log 1 giờ qua của service  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | 
💡 Để 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 --helphoặcdocker <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/