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.
- 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
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
- Xác định mục tiêu thay đổi.
- Backup file cấu hình hoặc tạo snapshot nếu thay đổi rủi ro.
- Kiểm tra trạng thái hiện tại bằng lệnh phù hợp.
- Thay đổi trên lab/staging trước nếu có.
- Áp dụng production trong khung giờ phù hợp.
- Kiểm tra log, service, port, endpoint sau thay đổi.
- 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.
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
- Dựng lab nhỏ cho chủ đề này.
- Chạy toàn bộ lệnh kiểm tra.
- Tạo một lỗi nhỏ có kiểm soát và sửa lại.
- 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
latestvô 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.
