Bài 18: Docker cơ bản cho SysAdmin

Bài 18: Docker cơ bản cho SysAdmin

Bài này chi tiết hóa Docker theo hướng dễ hiểu, có lệnh thực hành, tình huống production, checklist và bài tập.

Sau bài này anh sẽ biết:

  • Hiểu Docker dùng để giải quyết vấn đề gì trong production.
  • Nắm các lệnh/cấu hình quan trọng.
  • Biết quy trình thực hành từng bước trong lab.
  • Có checklist kiểm tra trước khi áp dụng production.

Chốt ý nhanh

Chủ đề Điểm cần nhớ
Docker Giúp đóng gói ứng dụng và môi trường chạy thành đơn vị nhất quán.
Góc nhìn SysAdmin Quan trọng nhất là biết image nào đang chạy, port nào được publish, volume nào chứa dữ liệu.
Rủi ro Container tiện nhưng không tự động giải quyết backup, security hay observability.

1. Bối cảnh thực tế

Docker không phải kiến thức lý thuyết riêng lẻ. Trong vận hành production, nó giúp giảm downtime, giảm rủi ro bảo mật và giúp hệ thống dễ khôi phục hơn khi có sự cố.

2. Các khái niệm cần nắm

  • Trạng thái hiện tại: trước khi sửa phải biết hệ thống đang chạy thế nào.
  • Thay đổi nhỏ: thay đổi từng bước để dễ rollback.
  • Log/metric: dùng để xác nhận thay đổi đúng hay sai.
  • Rollback: luôn có đường quay lại khi cấu hình lỗi.

3. Lab thực hành

Mục tiêu lab: chạy các lệnh kiểm tra, tạo thay đổi nhỏ và xác nhận kết quả.
docker version
docker ps
docker ps -a
docker images
docker run --rm hello-world
docker logs CONTAINER_NAME
docker exec -it CONTAINER_NAME sh
docker system df

Khi thực hành, anh nên ghi lại output trước và sau. Đây là thói quen rất quan trọng của SysAdmin/DevOps.

4. Tình huống thực tế

Ứng dụng chạy trong container bị lỗi. Anh cần biết container còn chạy không, log báo gì, port map thế nào, image version nào và volume có chứa dữ liệu quan trọng không.

5. Quy trình triển khai an toàn

  1. Xác định mục tiêu thay đổi.
  2. Backup file cấu hình hoặc tạo snapshot nếu thay đổi rủi ro.
  3. Kiểm tra trạng thái hiện tại bằng lệnh phù hợp.
  4. Thay đổi trên lab/staging trước nếu có.
  5. Áp dụng production trong khung giờ phù hợp.
  6. Kiểm tra log, service, port, endpoint sau thay đổi.
  7. Ghi lại thay đổi và phương án rollback.

6. Lỗi thường gặp

  • Làm trực tiếp production mà không backup.
  • Sửa nhiều thứ cùng lúc nên không biết lỗi do đâu.
  • Không đọc log sau khi reload/restart service.
  • Không ghi lại command đã chạy.
Lưu ý production: Nếu thay đổi có thể làm mất kết nối, dừng service hoặc ảnh hưởng dữ liệu, hãy chuẩn bị rollback trước khi chạy lệnh.

7. Checklist

  • Đã kiểm tra trạng thái hiện tại.
  • Đã backup cấu hình/dữ liệu liên quan.
  • Đã test syntax/config nếu có.
  • Đã xác nhận service hoạt động sau thay đổi.
  • Đã ghi lại thay đổi vào tài liệu vận hành.

8. Bài tập

  1. Dựng lab nhỏ cho chủ đề này.
  2. Chạy toàn bộ lệnh kiểm tra.
  3. Tạo một lỗi nhỏ có kiểm soát và sửa lại.
  4. Viết checklist 5 bước dùng cho production.

Phần thực hành mở rộng: Docker như công cụ vận hành chứ không phải phép màu

Người mới rất dễ hiểu Docker như một “hộp đen chạy app”. Bài này nên giúp người học nhìn rõ container, image, volume, network và mối liên hệ của chúng với hệ điều hành bên dưới.

Lab 1: Quan sát Docker daemon và container đang chạy

systemctl status docker
sudo docker ps -a
sudo docker images
sudo docker volume ls
sudo docker network ls

Đây là bộ lệnh nền tảng để biết máy đang có gì trước khi can thiệp.

Lab 2: Chạy thử một container web đơn giản

sudo docker run -d --name webdemo -p 8080:80 nginx:alpine
sudo docker ps
curl -I http://127.0.0.1:8080

Mục tiêu là hiểu mapping cổng: 8080 trên host đi vào 80 trong container.

Lab 3: Đọc log và inspect container

sudo docker logs webdemo
sudo docker inspect webdemo | less
sudo docker exec -it webdemo sh

Phần này rất quan trọng vì production troubleshooting thường bắt đầu từ log và inspect chứ không phải xóa chạy lại ngay.

Lab 4: Dùng volume để tách dữ liệu khỏi vòng đời container

sudo docker volume create appdata
sudo docker run --rm -v appdata:/data alpine sh -c 'echo hello > /data/test.txt'
sudo docker run --rm -v appdata:/data alpine cat /data/test.txt

Lab này giúp anh thấy vì sao dữ liệu không nên nằm hẳn trong filesystem tạm của container.

Lab 5: Dọn dẹp có kiểm soát

sudo docker stop webdemo
sudo docker rm webdemo
sudo docker image ls
sudo docker system df

Hãy phân biệt rõ container, image, volume. Xóa container không đồng nghĩa xóa image hay dữ liệu volume.

Tình huống thực tế

Một service chạy ổn bằng Docker nhưng disk đầy vì image cũ, log container hoặc volume rác tích tụ. Nếu không hiểu tài nguyên nằm ở đâu, anh sẽ rất khó giữ môi trường sạch và ổn định.

Lỗi phổ biến

  • Publish port ra public mà không kiểm soát firewall.
  • Lưu dữ liệu quan trọng trong container thay vì volume/bind mount.
  • Chỉ biết restart container mà không đọc log nguyên nhân.
  • Dùng tag latest vô tội vạ trong production.

Kết bài

Nếu bài này ngấm, anh sẽ bớt nhìn Docker như một lớp ma thuật và bắt đầu xem nó như hạ tầng có cấu trúc rõ ràng: process, port, filesystem, network, log. Bài tiếp theo sẽ ghép thêm một mảnh rất thực dụng vào quy trình đó: Git và deploy cơ bản.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *