Hướng Dẫn Xóa Các Thành Phần Docker Không Dùng

Ngày đăng: July 17, 2025

Ubuntu

description image Docker cung cấp tất cả công cụ cần thiết để bạn dọn dẹp hệ thống từ dòng lệnh. Hướng dẫn dạng mẹo này cung cấp tài liệu tham khảo nhanh các lệnh hữu ích để giải phóng dung lượng đĩa và giữ hệ thống gọn gàng bằng cách loại bỏ các hình ảnh, container và volume Docker không sử dụng.

Cách sử dụng hướng dẫn này:

  • Hướng dẫn được trình bày dưới dạng mẹo với các đoạn lệnh dòng lệnh có thể sử dụng độc lập.
  • Bạn có thể chuyển đến bất kỳ phần nào liên quan đến nhiệm vụ bạn muốn hoàn thành.

Lưu ý: Cú pháp thay thế lệnh, command $(command) được sử dụng trong các lệnh có sẵn trên nhiều shell phổ biến như bash, zsh, và Windows Powershell.

Xóa tất cả các Images, Containers, Volumes, và Networks không dùng hoặc dangling

Docker cung cấp một lệnh duy nhất để dọn dẹp bất kỳ tài nguyên nào — images, containers, volumes, và networks — mà là dangling (không được gắn thẻ hoặc không liên kết với container nào):

docker system prune

Để đồng thời xóa thêm các container đã dừng và tất cả các image không dùng (không chỉ các image dangling), thêm cờ -a vào lệnh:

docker system prune -a

Xóa Docker Images

Xóa một hoặc nhiều image cụ thể

Dùng lệnh docker images -a để tìm ID của các ảnh bạn muốn xóa. Lệnh này sẽ hiển thị tất cả ảnh, bao gồm cả các lớp ảnh trung gian. Khi đã xác định được ảnh muốn xóa, bạn có thể truyền ID hoặc tag của chúng cho docker rmi:

Liệt kê:

docker images -a

Xóa:

docker rmi Image Image

Lưu ý: Cờ -a hoặc --all trong lệnh docker images hiển thị tất cả các ảnh Docker, kể cả ảnh trung gian chưa được tham chiếu bởi thẻ nào. Theo mặc định, docker images chỉ hiển thị ảnh có ít nhất một thẻ. Tuy nhiên, có thể có những ảnh không có thẻ vẫn chiếm dung lượng đĩa. Cờ -a rất hữu ích để nhận diện các ảnh có thể bị xóa để tiết kiệm dung lượng. Khi dùng với lệnh docker rmi, cờ -f hoặc --force có thể dùng để xóa ảnh không có thẻ.

Xóa các Docker images danglig (không được gắn thẻ)

Docker images gồm nhiều lớp. Image dangling là các lớp không có liên quan đến bất kỳ image gắn thẻ nào. Chúng không còn hữu ích và chiếm dung lượng đĩa. Bạn có thể tìm chúng bằng cách dùng cờ lọc -f dangling=true trong lệnh docker images. Khi chắc chắn muốn xóa, bạn dùng lệnh:

Liệt kê:

docker images -f dangling=true

Xóa:

docker image prune

Lưu ý: Nếu bạn xây dựng một image mà không gắn thẻ, ảnh sẽ xuất hiện trong danh sách ảnh dangling vì không được liên kết với ảnh có thẻ. Bạn có thể tránh điều này bằng cách gắn thẻ khi xây dựng và có thể gắn thẻ lại ảnh bằng lệnh docker tag.

Xóa các images theo mẫu

Bạn có thể tìm tất cả ảnh phù hợp với một mẫu chuỗi bằng cách kết hợp docker imagesgrep. Khi đã xác định được ảnh muốn xóa, dùng awk để truyền ID cho docker rmi. Lưu ý, các tiện ích này không được cung cấp bởi Docker và không phải lúc nào cũng có trên tất cả hệ thống:

Liệt kê:

docker images -a | grep "pattern"

Xóa:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

Xóa tất cả các images

Tất cả các image Docker trên hệ thống có thể được liệt kê bằng cách thêm -a cho lệnh docker images. Khi muốn xóa hết, dùng -q để truyền ID ảnh cho docker rmi:

Liệt kê:

docker images -a

Xóa:

docker rmi $(docker images -a -q)

Xóa Containers

Xóa một hoặc nhiều container cụ thể

Dùng lệnh docker ps -a để tìm tên hoặc ID của container muốn xóa:

Liệt kê:

docker ps -a

Xóa:

docker rm ID_or_Name ID_or_Name

Xóa container khi thoát

Nếu bạn biết khi tạo container không muốn giữ lại sau khi kết thúc, có thể chạy:

Chạy và Xóa:

docker run --rm image_name

Xóa tất cả container đã thoát

Bạn có thể dùng lệnh docker ps -a lọc container theo trạng thái: created, restarting, running, paused, hoặc exited. Để xem container exited, dùng cờ lọc -f status=exited. Khi xác nhận muốn xóa, dùng -q để lấy ID và truyền cho docker rm:

Liệt kê:

docker ps -a -f status=exited

Xóa:

docker rm $(docker ps -a -f status=exited -q)

Xóa container dùng nhiều bộ lọc

Docker cho phép kết hợp nhiều bộ lọc bằng cách dùng nhiều lần cờ -f. Ví dụ, muốn xóa container có trạng thái created hoặc exited:

Liệt kê:

docker ps -a -f status=exited -f status=created

Xóa:

docker rm $(docker ps -a -f status=exited -f status=created -q)

Xóa container theo mẫu

Tương tự với hình ảnh, dùng docker ps kết hợp grep để tìm container phù hợp mẫu. Sau khi xác nhận, dùng awkxargs để truyền ID cho docker rm:

Liệt kê:

docker ps -a | grep "pattern"

Xóa:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

Dừng và xóa tất cả container

Xem danh sách container với docker ps -a. Khi chắc chắn muốn xóa hết, dùng -q để lấy ID rồi truyền cho docker stopdocker rm:

Liệt kê:

docker ps -a

Xóa:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Xóa Volumes

Xóa một hoặc nhiều volume cụ thể

Dùng lệnh docker volume ls để tìm tên volume muốn xóa. Sau đó dùng docker volume rm để xóa:

Liệt kê:

docker volume ls

Xóa:

docker volume rm volume_name volume_name

Xóa volume dangling

Vì volume tồn tại độc lập với container, khi xóa container, volume không tự xóa. Volume không liên kết với container nào gọi là volume dangling. Dùng lệnh docker volume ls với bộ lọc để tìm chúng. Khi hài lòng với danh sách, dùng docker volume prune để xóa:

Liệt kê:

docker volume ls -f dangling=true

Xóa:

docker volume prune

Xóa container cùng volume của nó

Nếu bạn tạo volume không tên, có thể xóa cùng lúc container với cờ -v. Chỉ áp dụng cho volume không tên. Khi xóa thành công container, ID container được hiển thị. Volume không tên sẽ bị xóa âm thầm, volume có tên thì vẫn còn:

Xóa:

docker rm -v container_name

So sánh: docker rm vs docker rmi vs docker prune

Lệnh Mô Tả Đối Tượng Cờ
docker rm Xóa một hoặc nhiều container Containers -f để xóa bắt buộc, -v xóa volume
docker rmi Xóa một hoặc nhiều image Images -f để xóa bắt buộc
docker prune Xóa các tài nguyên không dùng hoặc dangling Images, Containers, Volumes, Networks -a xóa tất cả tài nguyên không dùng, -f xóa bắt buộc

Lưu ý: Cờ -f dùng để bắt buộc xóa tài nguyên mà không hỏi xác nhận. Cờ -a dùng để xóa tất cả tài nguyên không dùng, bao gồm cả dangling.


Lỗi phổ biến và nguyên nhân

Xử lý đồng bộ luồng khi nhiều container chia sẻ volumes

Khi nhiều container dùng chung volumes, có thể gặp lỗi đồng bộ dẫn đến hỏng dữ liệu hoặc hành vi không mong muốn. Có thể xử lý bằng các cách:

  • Dùng Volume có tên: Quản lý dữ liệu chia sẻ tốt hơn. Ví dụ trong file Docker Compose:
version: '3.8'
services:
  app:
    image: myapp
    volumes:
      - myvolume:/app/node_modules
volumes:
  myvolume:
  • Khóa file: Dùng cơ chế khóa file để đảm bảo chỉ một container truy cập file cùng lúc, ví dụ flock hoặc lockfile trong mã nguồn.

  • Dùng Docker Compose: Quản lý multi-container dễ dàng hơn, ví dụ:

version: '3.8'
services:
  app:
    image: myapp
    volumes:
      - myvolume:/app/node_modules
    depends_on:
      - db
  db:
    image: mydb
    volumes:
      - myvolume:/var/lib/mysql
volumes:
  myvolume:

Gỡ lỗi tắc nghẽn do các lớp ảnh quá nhiều

Nhiều lớp ảnh gây hiệu năng chậm khi build và deploy. Các bước xử lý:

  • Phân tích các lớp ảnh:
docker history myapp
  • Tối ưu Dockerfile: Gom các lệnh RUN thành một để giảm số lớp, ví dụ:

Thay vì:

RUN apt update && apt install -y python3
RUN apt install -y python3-pip

Dùng:

RUN apt update && apt install -y python3 python3-pip
  • Dùng Multi-Stage Builds: Giúp ảnh nhỏ hơn và hiệu quả hơn bằng cách chỉ sao chép phần cần thiết:
FROM scratch AS base
WORKDIR /app
COPY go.mod ./
COPY go.sum ./
RUN go mod download

FROM base AS builder
RUN go build -o myapp

FROM scratch
COPY --from=builder /app/myapp .
CMD ["./myapp"]

Sửa lỗi "container is running" khi cố gắng xóa container đang hoạt động

Khi cố xóa container đang chạy, gặp lỗi container is running. Các cách khắc phục:

  1. Dừng container trước rồi xóa:
docker stop <container_id>
docker rm <container_id>
  1. Ép xóa ngay bằng:
docker rm -f <container_id>
  1. Dừng và xóa tất cả container:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
  1. Dùng Docker Compose:
docker-compose down
  1. Nếu dùng Docker Desktop, dùng GUI nhấn chuột phải container đang chạy rồi chọn "Stop" rồi "Remove".

FAQs

  1. Làm sao xóa hết container đã dừng trong Docker?

Dùng:

docker-compose down

hoặc

docker system prune -a
  1. Chạy docker system prune có tác dụng gì?

Xóa tất cả container đã dừng và mạng không dùng. Dùng -a thêm xóa hình ảnh không dùng giúp giải phóng không gian đĩa.

  1. Có thể xóa container đang chạy không?

Có thể dùng docker rm -f <container_id> để ép xóa container đang chạy.

  1. Cách giải phóng không gian đĩa trên Docker?
  • docker system prune -a: Xóa toàn bộ ảnh không dùng.
  • docker system prune -a -v: Xóa ảnh và volume không dùng.
  • docker volume prune -a: Xóa volume không dùng.
  • docker network prune -a: Xóa mạng không dùng.
  1. Sự khác nhau giữa docker rmdocker rmi?

docker rm xóa container, còn docker rmi xóa hình ảnh.

  1. Làm sao xóa hoàn toàn Docker image?
docker rmi <image-id>
  1. Xóa ảnh Docker không dùng?
docker image prune

hoặc để xóa tất cả ảnh không dùng:

docker image prune --all
  1. Xóa tất cả ảnh, container, volume, network?
docker system prune --all --volumes

Lưu ý: Lệnh này xóa sạch tất cả, bao gồm container đã dừng và volume.

  1. Làm sao xóa file trong image Docker?

Không thể thay đổi trực tiếp image, mà tạo image mới sau khi xóa file trong container:

docker run -it <image-id> /bin/bash
# Xóa file trong container

Sau đó commit container thành image mới:

docker commit <container-id> <new-image-name>
  1. Xóa hết container đã dừng?
docker container prune

Nhấn xác nhận hoặc dùng -f để bỏ qua xác nhận.

  1. Xóa container cũ không dùng?
docker ps -a --filter "status=exited" --filter "status=created"
docker rm $(docker ps -a -q --filter "status=exited" --filter "status=created")
  1. Image Docker lưu ở đâu?
  • Linux: /var/lib/docker
  • MacOS: trong VM của Docker Desktop
  • Windows: trong WSL2 VM hoặc C:\ProgramData\DockerDesktop

Xem đường dẫn bằng:

docker info | grep "Docker Root Dir"
  1. Xóa container tự động khi kết thúc?

Dùng cờ --rm khi tạo container:

docker run --rm <image-id>

Container sẽ tự động bị xóa ngay khi dừng.

Kết luận

Hướng dẫn này trình bày các lệnh phổ biến để xóa images, containers và volumes trong Docker. Còn nhiều tổ hợp và cờ khác có thể dùng. Chúc các bạn thành công!

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời