Khi làm việc với Docker trong môi trường sản xuất hoặc phát triển, việc nắm vững một số lệnh cốt lõi giúp kiểm soát hiệu quả vòng đời container và hình ảnh. Dưới đây là những lệnh thường dùng nhất, được trình bày lại với cấu trúc rõ ràng, ví dụ cập nhật và giải thích tập trung vào ngữ cảnh thực tế.
1. Lưu và khôi phục hình ảnh dưới dạng tệp nén
Lệnh docker save xuất một hoặc nhiều hình ảnh thành định dạng .tar, phù hợp để sao lưu cục bộ hoặc chuyển giao giữa các hệ thống không kết nối mạng.
docker save [TÙY_CHỌN] TÊN_HÌNH_ẢNH[:THẺ] > tệp_lưu.tar
Ví dụ: Lưu hình ảnh alpine:latest thành alpine-backup.tar:
$ docker save alpine:latest > alpine-backup.tar
$ ls -lh alpine-backup.tar
-rw-r--r-- 1 user user 5.6M Dec 20 22:05 alpine-backup.tar
Để khôi phục hình ảnh từ tệp đã lưu:
$ docker load < alpine-backup.tar
Loaded image: alpine:latest
2. Giám sát đầu ra nhật ký container
Lệnh docker logs trích xuất luồng stdout/stderr của container đang chạy hoặc đã dừng. Đây là công cụ then chốt để gỡ lỗi ứng dụng.
-f: Theo dõi nhật ký theo thời gian thực (tương tựtail -f)--since="2024-01-01": Chỉ hiển thị nhật ký từ thời điểm xác định--tail=20: Hiển thị 20 dòng mới nhất
Ví dụ: Xem 15 dòng nhật ký gần nhất từ container có ID b8a3c1e7f9d2, bắt đầu từ 00:00 hôm nay:
$ docker logs --since="2024-01-01T00:00:00" --tail=15 b8a3c1e7f9d2
3. Xóa container một cách có kiểm soát
Lệnh docker rm loại bỏ container đã dừng. Với container đang hoạt động, cần thêm cờ -f để buộc dừng và xóa ngay lập tức.
docker rm [-f] [-v] TÊN_HOẶC_ID_CONTAINER
Trong đó:
-f: Gửi tín hiệuSIGKILLđể chấm dứt container đang chạy-v: Xóa đồng thời các volume gắn với container (nếu có)
Ví dụ:
$ docker ps -a | grep "myapp"
a1b2c3d4e5f6 nginx:alpine "nginx -g 'daemon..." 2 hours ago Exited (0) 1 hour ago myweb
$ docker rm -f a1b2c3d4e5f6
a1b2c3d4e5f6
4. Sao chép dữ liệu hai chiều giữa host và container
Lệnh docker cp hỗ trợ truyền tệp hoặc thư mục giữa hệ thống máy chủ và hệ thống tệp của container — tương tự scp, nhưng không yêu cầu SSH.
# Từ host → container
docker cp /path/on/host CONTAINER_ID:/path/in/container
# Từ container → host
docker cp CONTAINER_ID:/path/in/container /path/on/host
Ví dụ: Sao chép thư mục cấu hình từ host vào container đang chạy:
$ docker cp ./config/nginx.conf webserver:/etc/nginx/conf.d/default.conf
5. Phát hiện thay đổi hệ thống tệp trong container
Lệnh docker diff liệt kê các thay đổi đối với lớp đọc-ghi của container so với hình ảnh gốc — hữu ích để kiểm tra hành vi runtime hoặc xác minh tính toàn vẹn sau khi cập nhật.
Ký hiệu đầu dòng:
A: Tệp/thư mục được thêm mớiD: Đã bị xóaC: Đã bị sửa đổi
Ví dụ:
$ docker diff 9f8e7d6c5b4a
C /etc
A /etc/myapp.conf
C /var/log
A /var/log/app.log
6. Dọn dẹp hình ảnh không còn sử dụng
Lệnh docker rmi xóa hình ảnh khỏi bộ nhớ cục bộ. Nếu hình ảnh đang được sử dụng bởi container (kể cả đã dừng), cần xóa container trước hoặc dùng -f.
docker rmi [-f] [--no-prune] TÊN_HÌNH_ẢNH[:THẺ]
Ví dụ: Xóa hình ảnh ubuntu:22.04 và bỏ qua việc dọn dẹp các lớp trung gian:
$ docker rmi ubuntu:22.04 --no-prune