1. Docker là gì và tại sao cần dùng?
Docker là một nền tảng mã nguồn mở cho phép đóng gói ứng dụng và các phụ thuộc vào container – một đơn vị nhẹ, độc lập, có thể chạy trên bất kỳ hệ thống nào cài Docker. Container khác với máy ảo (VM) ở chỗ chúng chia sẻ nhân hệ điều hành của máy chủ, giúp tiết kiệm tài nguyên và khởi động trong vài giây.
Lợi ích của Docker:
- Tính nhất quán: Ứng dụng chạy giống nhau trên mọi môi trường, từ máy local đến server sản xuất.
- Tính di động: Container có thể triển khai trên bất kỳ máy nào có Docker.
- Hiệu suất cao: Container nhẹ hơn máy ảo, sử dụng ít CPU và RAM.
- Dễ dàng mở rộng: Hỗ trợ phát triển microservices và tích hợp CI/CD.
So sánh với máy ảo:
Tiêu chí | Docker Container | Máy ảo (VM) |
---|---|---|
Kích thước | Nhẹ (vài MB đến GB) | Nặng (vài GB) |
Thời gian khởi động | Nhanh (giây) | Chậm (phút) |
Tài nguyên | Chia sẻ nhân OS | Cần OS riêng cho mỗi VM |
Cách ly | Cách ly ở mức tiến trình | Cách ly hoàn toàn ở mức phần cứng |
2. Cài đặt Docker
Để bắt đầu, bạn cần cài đặt Docker trên máy tính. Dưới đây là hướng dẫn cho ba hệ điều hành phổ biến: Windows, macOS, và Ubuntu.
Cài đặt trên Windows
- Tải Docker Desktop từ trang chính thức.
- Chạy file cài đặt Docker Desktop Installer.exe và làm theo hướng dẫn.
- Đảm bảo bật WSL 2 (Windows Subsystem for Linux) nếu dùng container Linux.
- Khởi động Docker Desktop và kiểm tra bằng lệnh:
docker run hello-world
Yêu cầu hệ thống:
- Windows 10/11 Pro hoặc Enterprise, 64-bit, phiên bản 22H2 trở lên.
- Bật Hyper-V và Containers trong Windows Features.
Cài đặt trên macOS
- Tải file .dmg từ Docker Desktop.
- Kéo Docker.app vào thư mục Applications.
- Chạy Docker.app và làm theo hướng dẫn cài đặt.
- Kiểm tra cài đặt:
docker run hello-world
Yêu cầu hệ thống:
- macOS phiên bản hiện tại hoặc hai phiên bản trước.
- Tối thiểu 4GB RAM.
Cài đặt trên Ubuntu
- Cập nhật danh sách gói:
sudo apt-get update
- Thêm khóa GPG của Docker:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
- Thêm repository Docker:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Cài đặt Docker:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- Kiểm tra:
sudo docker run hello-world
Lưu ý: Nếu gặp lỗi quyền, thêm người dùng vào nhóm docker:
sudo usermod -aG docker $USER
3. Các lệnh Docker cơ bản
Dưới đây là các lệnh cơ bản để làm việc với Docker:
Lệnh | Mô tả |
---|---|
docker run <image> | Chạy container từ image |
docker ps | Liệt kê container đang chạy |
docker ps -a | Liệt kê tất cả container |
docker stop <container_id> | Dừng container |
docker rm <container_id> | Xóa container |
docker images | Liệt kê image |
docker rmi <image_id> | Xóa image |
docker pull <image> | Tải image từ Docker Hub |
Ví dụ thực tế:
- Chạy container thử nghiệm:
docker run hello-world
- Chạy container Ubuntu với shell tương tác:
docker run -it ubuntu bash
Mẹo: Sử dụng -it để chạy container ở chế độ tương tác với terminal.
4. Tạo image Docker
Để tạo image tùy chỉnh, bạn cần viết file Dockerfile. Dưới đây là ví dụ đơn giản:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
CMD ["python3", "--version"]
Các bước:
- Tạo thư mục dự án và file Dockerfile.
- Xây dựng image:
docker build -t my-python-image .
- Chạy container từ image:
docker run my-python-image
Giải thích:
- FROM: Chỉ định image cơ sở.
- RUN: Thực thi lệnh trong quá trình xây dựng image.
- CMD: Lệnh mặc định khi container khởi động.
5. Làm việc với container
Chạy container ở chế độ nền
Sử dụng cờ -d để chạy container ở chế độ detached:
docker run -d nginx
Thực thi lệnh trong container
Chạy lệnh trong container đang hoạt động:
docker exec -it <container_id> bash
Ánh xạ cổng
Kết nối cổng container với máy chủ:
docker run -p 80:80 nginx
Truy cập http://localhost để xem trang web Nginx.
Gắn kết volume
Chia sẻ dữ liệu giữa máy chủ và container:
docker run -v /host/path:/container/path image_name
6. Sử dụng Docker Compose
Docker Compose giúp quản lý nhiều container cùng lúc. Ví dụ file docker-compose.yml:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
Các bước:
- Tạo file docker-compose.yml.
- Chạy ứng dụng:
docker-compose up
- Dừng ứng dụng:
docker-compose down
7. Các thực hành tốt nhất
- Giữ image nhỏ: Sử dụng image cơ sở nhẹ như alpine.
- Không chạy container với quyền root: Thêm user không phải root trong Dockerfile.
- Sử dụng .dockerignore: Loại bỏ file không cần thiết khi xây dựng image.
- Dọn dẹp thường xuyên: Xóa container và image không dùng:
docker system prune
- Sử dụng multi-stage builds: Giảm kích thước image cho ứng dụng phức tạp.
8. Các trường hợp sử dụng phổ biến
- Môi trường phát triển: Tạo môi trường nhất quán cho nhóm phát triển.
- Pipeline CI/CD: Sử dụng container để xây dựng, kiểm thử ứng dụng.
- Kiến trúc microservices: Triển khai các dịch vụ độc lập, dễ mở rộng.
9. Câu hỏi thường gặp (FAQ)
1. Docker khác gì máy ảo?
Docker sử dụng container, chia sẻ nhân OS, nhẹ và nhanh hơn máy ảo.
2. Làm sao để kiểm tra Docker đã cài đúng?
Chạy docker run hello-world. Nếu thấy thông báo “Hello from Docker!”, cài đặt thành công.
3. Docker Hub là gì?
Docker Hub là kho lưu trữ image công cộng, nơi bạn có thể tải hoặc chia sẻ image.
4. Làm sao để xóa tất cả container?
Chạy:
docker rm $(docker ps -a -q)
5. Có thể chạy Docker trên máy yếu không?
Docker nhẹ hơn máy ảo, nhưng cần ít nhất 4GB RAM để chạy mượt.
6. Làm sao để xem log của container?
Sử dụng:
docker logs <container_id>
Bắt đầu hành trình với Docker ngay hôm nay! Tải Docker Desktop và thử chạy container đầu tiên của bạn. Nếu muốn tìm hiểu thêm, hãy xem các bài viết về DevOps hoặc CI/CD trên TechNT để nâng cao kỹ năng!