Docker Container: Quản lý vòng đời Container

Photo of author

Văn Ngọc Tân

Docker Container: Quản lý vòng đời Container

Bạn có biết?

Hãy tưởng tượng bạn đang quản lý một nhà máy thu nhỏ. Nhà máy đó chính là Container — nơi mọi thứ được vận hành. Bản thiết kế để xây nhà máy? Đó là Image. Và bạn — người quản lý — cần biết cách khởi động, tạm dừng, dừng, hay thậm chí phá dỡ nhà máy khi cần.

Đó chính xác là những gì bạn làm với Docker Container. Mỗi container là một instance đang chạy của một Image — cô lập, nhẹ, và có thể quản lý hoàn toàn bằng CLI.

Vòng đời Container là gì?

Một Container trải qua nhiều trạng thái trong suốt vòng đời của nó:

Created → Running → Paused → Stopped → Removed
   │          │         │         │         │
   │          │         │         │         └─ docker rm
   │          │         │         └─ docker stop
   │          │         └─ docker pause
   │          └─ docker start / docker run
   └─ docker create

Hiểu rõ vòng đời giúp bạn quản lý container hiệu quả hơn — biết khi nào nên dừng, khi nào nên xóa, và khi nào cần debug.

Các lệnh cơ bản

docker run — Tạo và chạy Container

docker run là lệnh phổ biến nhất — nó tạo container mới từ image và khởi động ngay lập tức.

# Chạy container ở chế độ background
$ docker run -d --name my-nginx -p 8080:80 nginx

# Chạy interactive với terminal
$ docker run -it --name my-ubuntu ubuntu bash

# Chạy và tự xóa khi dừng (--rm)
$ docker run --rm -it alpine sh

# Truyền biến môi trường
$ docker run -d -e MYSQL_ROOT_PASSWORD=secret mysql

Các flags quan trọng:

  • -d: Chạy background (detached mode)
  • -it: Interactive + TTY (để nhập lệnh trong container)
  • –name: Đặt tên cho container
  • -p: Map port (host:container)
  • -e: Set biến môi trường
  • –rm: Tự động xóa container khi dừng

docker ps — Xem Container đang chạy

# Xem container đang chạy
$ docker ps

# Xem tất cả container (kể cả đã dừng)
$ docker ps -a

# Format output đẹp hơn
$ docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

docker start / stop / restart

# Khởi động container đã dừng
$ docker start my-nginx

# Dừng container đang chạy
$ docker stop my-nginx

# Khởi động lại
$ docker restart my-nginx

docker stop gửi tín hiệu SIGTERM, cho container thời gian dọn dẹp (mặc định 10 giây) trước khi buộc dừng bằng SIGKILL.

docker pause / unpause

# Tạm dừng container (freeze process)
$ docker pause my-nginx

# Tiếp tục chạy
$ docker unpause my-nginx

Khác với stop, pause giữ container trong bộ nhớ — trạng thái được giữ nguyên, không cần khởi động lại từ đầu.

docker rm — Xóa Container

# Xóa container đã dừng
$ docker rm my-nginx

# Force xóa container đang chạy
$ docker rm -f my-nginx

# Xóa tất cả container đã dừng
$ docker container prune

docker exec — Chạy lệnh trong Container

# Mở shell trong container đang chạy
$ docker exec -it my-nginx bash

# Chạy lệnh một lần
$ docker exec my-nginx cat /etc/os-release

# Xem biến môi trường
$ docker exec my-nginx env

docker exec là công cụ debug mạnh mẽ nhất — giúp bạn “vào bên trong” container để kiểm tra.

docker logs — Xem log

# Xem log
$ docker logs my-nginx

# Follow log realtime
$ docker logs -f my-nginx

# Xem 100 dòng cuối
$ docker logs --tail 100 my-nginx

# Log có timestamp
$ docker logs -t my-nginx

docker inspect — Chi tiết Container

# Xem thông tin chi tiết (JSON)
$ docker inspect my-nginx

# Lấy IP address
$ docker inspect -f '{{.NetworkSettings.IPAddress}}' my-nginx

# Lấy environment variables
$ docker inspect -f '{{.Config.Env}}' my-nginx

# Lấy mount points
$ docker inspect -f '{{.Mounts}}' my-nginx
Container port logistics - quản lý container như quản lý hàng hóa tại cảng
Container trong Docker cũng giống như container tại cảng — mỗi cái đều có vòng đời riêng cần được quản lý. Ảnh: Unsplash.

Use Cases thực tế

1. Chạy Web Server tạm thời

$ docker run -d -p 8080:80 --name web nginx
# Truy cập http://localhost:8080

2. Debug Container đang chạy

# Vào container kiểm tra
$ docker exec -it web bash
root@container:/# cat /var/log/nginx/access.log
root@container:/# curl localhost

3. Xem log ứng dụng

# Theo dõi log realtime
$ docker logs -f web

# Kiểm tra lỗi
$ docker logs web 2>&1 | grep -i error

Bảng so sánh: docker run vs docker create

Tiêu chí docker run docker create
Hành động Tạo + Khởi động Chỉ tạo (chưa chạy)
Trạng thái sau Running Created
Cần start sau? Không
Use case Chạy ngay Chuẩn bị trước khi chạy

Bảng so sánh: docker stop vs docker kill

Tiêu chí docker stop docker kill
Tín hiệu SIGTERM → SIGKILL SIGKILL (ngay lập tức)
Thời gian chờ 10 giây (mặc định) Không chờ
Dọn dẹp? Có thời gian Không
Use case Dừng bình thường Container bị treo

Best Practices

  • Đặt tên cho Container — dễ quản lý với --name, thay vì nhớ ID dài dằng dặc
  • Dùng --rm cho container tạm — tự động xóa khi dừng, tránh đầy disk
  • Dùng -d cho production — chạy background, không chiếm terminal
  • Xem log trước khi debugdocker logs thường giải quyết 80% vấn đề
  • Dọn dẹp thường xuyêndocker container prune xóa container không dùng

Bước tiếp theo

Bạn đã nắm vững vòng đời Container — từ tạo, chạy, dừng, đến xóa. Tiếp theo, hãy tìm hiểu cách lưu trữ dữ liệu bền vững với Docker Volume, giúp dữ liệu không mất đi khi container bị xóa.

👉 Bài tiếp theo: Docker Volume: Lưu trữ dữ liệu bền vững

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận