Hướng Dẫn Quản Lý Docker Container Trên VPS
1. Giới Thiệu
Docker Container là thành phần quan trọng trong quá trình triển khai và vận hành ứng dụng bằng Docker. Sau khi tạo Conainer, người quản trị cần nắm được cách kiểm tra trạng thái hoạt động, xem thông tin cấu hình, theo dõi nguyên hệ thống và quản lý các tiến trình bên trong container.
Việc sử dụng thành thạo các lệnh quả lý Docker Container giúp đơn giản hóa quá trình vận hành ứng dụng, hỗ trợ phát hiện và xử lý sự cố, đồng thời nâng cao hiệu quả quản trị máy chủ. Bài viết này vNode sẽ hướng dẫn chi tiết các lệnh Docker Container phổ biến.
2. Chuẩn bị trước khi thực hiện
Trước khi bắt đầu, bạn cần chuẩn bị một VPS đã cài đặt Docker Engine và có quyền thực thi các lệnh Docker. Nếu VPS chưa cài Docker các bạn có thể tham khảo tài liệu dưới đây
Hướng Dẫn Cài Đặt Docker và Docker Compose Trên Ubuntu 24.04
Trong bài viết này, chúng ta sử dụng tên container:
nginx-container
Nếu bạn chưa tạo container, bạn có thể tham tài liệu dưới đây để tạo container
3. Tìm hiểu các khái niệm quan trọng
3.1. Vòng đời của Docker Container là gì?
Vòng đời container là các trạng thái và thao tác container trải qua từ khi được tạo cho đến khi bị xóa.
Một container thường có các trạng thái như:
- Create: Container đã được tạo nhưng chưa chạy.
- Running: Container đang chạy.
- Paused: Các tiến trình trong container tạm thời bị đóng băng.
- Exited: Container đã dừng hoặc tiến trình đã kết thúc.
- Restarting: Docker đang khởi động lại Container.
Bạn có thể kiểm tra trạng thái bằng lệnh:
vNode Tutorial
docker ps -a

Hiểu rõ vòng đời container sẽ giúp bạn phân biệt container đã dừng và container đã bị xóa. Một container ở trạng thái Exited vẫn tồn tại và có thể khởi động lại.
3.2. Phân biệt docker ps và docker ps -a
Hai lệnh này đều dùng để liệt kê container, nhưng có sự khác biệt:
- docker ps: Chỉ hiển thị các container đang chạy.
- docker ps -a: Hiện thị tất cả container, bao gồm cả container đã dừng.
Đây là 2 lệnh cơ bản cần nhớ khi quản trị Docker trên VPS.
3.3 Docker exec là gì?
docker exec cho phép chạy một lệnh bên trong container đang hoạt động mà không cần tạo container mới.
Lệnh này thường được sử dụng để kiểm tra tệp cấu hình, xem nội dung thư mục hoặc thực hiện các thao tác kiểm tra ứng dụng bên trong container
3.4 docker inspect là gì?
docker inspect hiện thị thông tin chi tiết về một đối tượng Docker, chẳng hạn như container hoặc image.
Với container, thông tin có thể bảo gồm trạng thái, image nguồn, cấu hình cổng, địa chỉ IP, đường dẫn lưu trữ và các thiết lập khởi chạy.
3.5. docker stats và docker top là gì?
- docker stats: Theo dõi mức sử dụng CPU, RAM, mạng và dữ liệu đọc/ghi của container.
- docker top: Hiển thị các tiến trình đang chạy bên trong container theo góc nhìn của hệ điều hành máy chủ.
Hai lệnh này giúp bạn kiểm tra hoạt động của ứng dụng và hỗ trợ việc xác định nguyên nhân container sử dụng nhiều tài nguyên.
3.6. docker cp là gì?
docker cp dùng để sao chép tệp hoặc thư mục giữa hệ thống VPS và container.
Ví dụ, bạn có thể sao chép 1 tệp HTML từ VPS vào thư mục phục vụ website của Nginx để kiểm tra nội dung hiển thị.
4. Thực hành quản lý container
Bước 1: Kiểm tra danh sách conatiner
Đầu tiên, kiểm tra container đang chạy:
vNode Tutorial
docker ps
Nếu Nginx đang chạy, kết quả sẽ có thông tin tương tự:

Các cột quan trọng:
- CONTAINER ID: Mã định danh container.
- IMAGE: Image được sử dụng để tạo container.
- COMMAND: Lệnh chính được thực thi khi container khởi chạy.
- STATUS: Trạng thái và thời gian hoạt động.
- PORTS: Các cổng được ánh xạ.
- NAMES: Tên container.
Tiếp theo, kiểm tra toàn bộ container:
vNode Tutorial
docker ps -a

Nếu một container có trạng thái Exited, điều đó có nghĩa là container đã dừng. Bạn có thể kiểm tra nguyên nhân thông qua log ở các bước tiếp theo.
Bước 2: Truy cập và bên trong container
Để mở một Shell bên trong container Nginx, sử dựng lệnh:
vNode Tutorial
docker exec -it nginx-container sh

Trong đó:
- docker exec: Thực thi lệnh bên trong container đang chạy.
- -i: Giữ đầu vào mở để người dùng tương tác.
- -t: Tạo 1 terminal giả lập.
- nginx-container: Tên container cần truy cập.
- sh: Mở shell bên trong container.
Sau khi chạy lệnh, bạn sẽ truy cập vào môi trường bên trong container. Thực hiện kiểm tra:
vNode Tutorial
whoami pwd ls -la

Trong đó:
- whoami: Kiểm tra người dùng hiện tại
- pwd: Kiểm tra thư mục hiện tại
- ls -la: Liệt kê file và thư mục
Bạn cũng có thể kiểm tra các tệp cấu hình Nginx:
vNode Tutorial
ls -la /ect/nginx

Để thoát khỏi shell và quay lại Terminal của VPS, sử dụng:
vNode Tutorial
exit
Lưu ý: Image Nginx tối giản thường có sh nhưng không nhất thiết có bash. Vì vậy, sử dụng sh sẽ phù hợp hơn trong bài viết này.
Ngoài ra, các thay đổi được thực hiện trực tiếp bên trong container có thể mất khi container bị xóa và tạo lại. Với dữ liệu cần lưu giữ lâu dài, nên sử dụng Docker Volume hoặc cơ chế lưu trữ phù hợp.
Bước 3: Kiểm tra thông tin chi tiết container
Để xem toàn bộ thông tin cấu hình của container, chạy:
vNode Tutorial
docker inspect nginx-container

Lệnh này trả dữ liệu ISON tương đối dài. Bạn có thể lọc riêng những thông tin cần thiết.
Kiểm tra trạng thái container:
vNode Tutorial
docker inspect -f '{{.State.Status}}' nginx-containerNếu container đang chạy, kết quả là:

Kiểm tra địa chỉ bên trong container:
vNode Tutorial
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx-containerKết quả có thể là một địa chỉ IP nội bộ, chẳng hạn 172.17.0.2 .Địa chỉ thực tế phụ thuộc vào cấu hình mạng Docker của VPS.

Kiểm tra cấu hình ánh xạ cổng:
vNode Tutorial
docker port nginx-container
Nếu đã ánh xạ cổng 8080 của VPS đến cổng 80 của container, kết quả thường có dạng:

Kết quả cụ thể phụ thuộc vào cấu hình lúc tạo container.
Bước 4: Theo dõi tài nguyên conatiner
Để xem mức sử dụng tài nguyên của các container đang chạy, sử dụng:
vNode Tutorial
docker stats
Docker sẽ hiển thị thông tin cập nhật liên tục, bao gồm:
- CPU %: Tỷ lệ sử dụng CPU.
- MEM USAGE / LIMIT: RAM đang sử dụng và giới hạn hiển thị.
- MEM %: Tỷ lệ sử dụng RAM so với giới hạn tương ứng.
- NET I/O: Dữ liệu mang nhận và gửi
- BLOCK I/O: Dữ liệu đọc và ghi qua các thiết bị lưu trữ.

Nếu chỉ muốn theo dõi container Nginx:
vNode Tutorial
docker stats nginx-container
Để lấy kết quả một lần rồi lại Terminal:
vNode Tutorial
docker stats --no-stream nginx-container
Lưu ý: Nếu chưa cấu hình giới hạn tài nguyên, container có thể sử dụng một phần đáng kể tài nguyên sẵn có của máy chủ. Thông tin giới hạn và cách tính mức sử dụng phụ thuộc vào cấu hình Docker cùng hệ điều hành.

Bước 5: Kiểm tra tiến trình trong container
Để xem các tiến trình đang chạy trong container Nginx, sử dụng:
vNode Tutorial
docker top nginx-container
Kết quả có thể hiển thị các tiến trình Nginx như tiến trình chính và các worker process.
Lệnh này hữu ích khi bạn muốn kiểm tra ứng dụng có thực sự chạy hay không mà chưa cần truy cập vào bên trong container.
Cần phân biệt:
- docker top: Hiển thị các tiến trình theo góc nhìn của hệ điều hành máy chủ.
- docker exec: Chạy một lệnh mới bên trong container đang hoạt động.

Bước 6: Sao chép tệp giữa VPS và container
Trong bước này, chúng ta sẽ tạo một tệp HTML trên VPS rồi sao chép vào container Nginx để kiểm tra nội dung website.
Tạo tệp HTML trên VPS
Chạy lệnh sau trên Terminal của VPS:
vNode Tutorial
cat > /tmp/docker-nginx.html <<'EOF'
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Docker Lab 04</title>
</head>
<body>
<h1>Xin chao! Nginx dang chay trong Docker Container.</h1>
<p>Day la bai quan ly Docker Container.</p>
</body>
</html>
EOFTệp được tạo tại:
vNode Tutorial
/tmp/docker-nginx.html
Sao chép tệp vào container
sử dụng lệnh:
vNode Tutorial
docker cp /tmp/docker-nginx.html nginx-container:/usr/share/nginx/html/nginx-tailieu.html

Trong đó:
- /tmp/docker-nginx.html: Đường dẫn tệp nguồn trên VPS.
- nginx-container: Tên container đích.
- /usr/share/nginx/html/nginx-tailieu.html: Đường dẫn tệp đích trong container, thuộc thư mục nội dung mặc định của image Nginx chính thức.
Kiểm tra tệp sau khi sao chép
vNode Tutorial
docker exec nginx-container ls -l /usr/share/nginx/html

Sau đó kiểm tra phản hồi HTTP:
vNode Tutorial
curl -I http://127.0.0.1:8080/nginx-tailieu.html
Nếu Nginx hoạt động bình thường, phản hồi thường có mã: HTPP/1.1 200 OK

Bạn cũng có thể xem nội dung trang bằng lệnh:
vNode Tutorial
curl http://127.0.0.1:8080/nginx-tailieu.html
Nếu truy cập từ máy tính cá nhân, mở địa chỉ:
vNode Tutorial
http://IP_VPS:8080/nginx-tailieu.html
Thay IP_VPS bằng địa chỉ IP thực tế của máy chủ.

Lưu ý: Tệp được sao chép trực tiếp vào container sẽ không tự động trở thành dữ liệu bền vững nếu container bị xóa. Đối với website triển khai thực tế, nên sử dụng Docker Volume hoặc bind mount để quản lý dữ liệu.
Bước 7: Đổi tên container
Docker cho phép đổi tên container bằng lệnh:
vNode Tutorial
docker rename nginx-container nginx-web
kiểm tra kết quả:

Tên container sẽ chuyển từ nginx-container thành nginx-web.
Nếu muốn đổi lại tên cũ, chạy:
vNode Tutorial
docker rename nginx-web nginx-container
Đổi tên container không tạo ra container mới và không làm thay đổi Docker Image ban đầu.
Bước 8: Dừng, khởi động và khởi động lại container
Đây là thao tác quản lý vòng đời thường dùng.
Dừng container:
vNode Tutorial
docker stop nginx-container
Kiểm tra trạng thái:
Container sẽ chuyển sang trạng thái Exited nếu đã dừng thành công.
Khởi động lại container đã dừng:
vNode Tutorial
docker start nginx-container
Khởi động lại container:
vNode Tutorial
docker restart nginx-container
Sau đó kiểm tra:
vNode Tutorial
docker ps curl -I http://127.0.0.1:8080
Nếu container đang hoạt động bình thường và cổng được cấu hình đúng, yêu cầu HTTP sẽ nhận được phản hồi thành công.

Bước 9: Xem log của container
Khi ứng dụng gặp lỗi hoặc không phản hồi, log là một trong những nguồn thông tin cần kiểm tra đầu tiên.
Xem log của container:
vNode Tutorial
docker logs nginx-container

Xem các dòng log gần nhất:
vNode Tutorial
docker logs --tail 50 nginx-container

Theo dõi log liên tục:
vNode Tutorial
docker logs -f nginx-container

Để dừng việc theo dõi log, nhấn Ctrl+C. Thao tác này chỉ kết thúc phiên theo dõi log, không dừng container.
Lưu ý: docker logs hiển thị những gì ứng dụng ghi ra luồng đầu ra chuẩn và luồng lỗi chuẩn. Với cấu hình Nginx mặc định trong image chính thức, log truy cập và log lỗi thường được chuyển đến các luồng này để Docker thu thập.
5. Xóa các container khi không còn sử dụng
Nếu bạn muốn xóa container sau khi thực hành, cần dừng container trước:
vNode Tutorial
docker stop nginx-container docker rm nginx-container

Kiểm tra lại danh sách container:
Container đã xóa sẽ không còn xuất hiện trong danh sách.

Nếu cần xóa một container đã dừng, bạn có thể chạy trực tiếp:
vNode Tutorial
docker rm nginx-container
Không nên xóa container đang phục vụ website thật nếu chưa kiểm tra ảnh hưởng và chuẩn bị phương án triển khai lại.
Lưu ý: Xóa container không đồng nghĩa với xóa image. Docker Image Nginx vẫn có thể còn trên VPS và được kiểm tra bằng:
vNode Tutorial
docker images

6. Một số lỗi thường gặp
Lỗi 1: Container không chạy:
vNode Tutorial
docker ps -a
Nếu trạng thái là Exited, xem log:
vNode Tutorial
docker logs nginx-container
Dựa vào thông báo lỗi để xác định nguyên nhân, chẳng hạn cấu hình không hợp lệ, tiến trình chính bị lỗi hoặc tài nguyên hệ thống không đủ.
Lỗi 2: Không thể truy cập vào container bằng docker exec
Nếu gặp lỗi container không chạy, hãy kiểm tra trạng thái:
vNode Tutorial
docker ps -a
docker exec chỉ hoạt động với container đang chạy. Nếu container đã dừng và có thể khởi động lại an toàn, chạy:
vNode Tutorial
docker start nginx-container
Sau đó thử lại:
vNode Tutorial
docker exec -it nginx-container sh
Lỗi 3: Không truy cập được website sau khi khởi động container
Kiểm tra các cổng đã ánh xạ:
vNode Tutorial
docker port nginx-container
Kiểm tra phản hồi trên VPS:
vNode Tutorial
docker ps curl -I http://127.0.0.1:8080
Nếu truy cập nội bộ thành công nhưng không truy cập được từ bên ngoài, hãy kiểm tra firewall của VPS, firewall của nhà cung cấp và cấu hình mạng liên quan đến cổng 8080.
Lỗi 4: Không tìm thấy tệp HTML vừa sao chép
Kiểm tra tệp trong container:
vNode Tutorial
docker exec nginx-container ls -l /usr/share/nginx/html
Nếu tệp không tồn tại, thực hiện lại lệnh docker cp và kiểm tra chính xác đường dẫn nguồn, tên container cùng đường dẫn đích.
Lỗi 5: Container bị xóa nhầm
Nếu container đã bị xóa, bạn không thể khôi phục chính container đó chỉ bằng docker start. Bạn cần tạo container mới từ image và cấu hình phù hợp.
Đối với dữ liệu quan trọng, hãy sử dụng volume hoặc bind mount, đồng thời có kế hoạch sao lưu trước khi thực hiện thao tác xóa.
Kết luận
Qua bài viết này, bạn đã tìm hiểu các lệnh quản lý Docker Container phổ biến, từ kiểm tra trạng thái hoạt động, truy cập vào bên trong container, xem thông tin cấu hình đến theo dõi tài nguyên và sao chép dữ liệu giữa VPS với container. Việc nắm vững những thao tác này sẽ giúp bạn quản lý ứng dụng hiệu quả hơn, chủ động kiểm tra và xử lý các sự cố trong quá trình vận hành Docker.
Sau khi thành thạo các lệnh quản lý container, bạn có thể tiếp tục tìm hiểu cách quản lý Docker Image, xây dựng image tùy chỉnh và triển khai các ứng dụng phức tạp hơn bằng Docker Compose. Đây là những kiến thức nền tảng giúp bạn từng bước làm chủ Docker trong môi trường thực tế.

