Docker là gì?
Docker là một nền tảng mã nguồn mở được thiết kế để phát triển, triển khai và chạy ứng dụng trong các container. Container cho phép bạn đóng gói ứng dụng cùng với tất cả các dependencies cần thiết vào một đơn vị chuẩn hóa để phát triển phần mềm.
Tại sao nên sử dụng Docker?
- Tính nhất quán: Ứng dụng chạy giống nhau trên mọi môi trường
- Tính di động: Dễ dàng di chuyển giữa các môi trường khác nhau
- Hiệu quả: Sử dụng tài nguyên hệ thống hiệu quả hơn so với VM
- Tốc độ: Khởi động nhanh chóng trong vài giây
- Cô lập: Các container độc lập với nhau
Cài đặt Docker
# Trên Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Thêm user vào group docker
sudo usermod -aG docker $USER
# Kiểm tra phiên bản
docker --version
Các lệnh Docker cơ bản
# Chạy container
docker run -d -p 80:80 nginx
# Liệt kê container đang chạy
docker ps
# Dừng container
docker stop <container_id>
# Xem logs
docker logs <container_id>
# Xóa container
docker rm <container_id>
Tạo Dockerfile
Dockerfile là file text chứa các lệnh để build Docker image:
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . /app
RUN pip3 install -r requirements.txt
CMD ["python3", "app.py"]
Build và Run
# Build image
docker build -t myapp:1.0 .
# Run container
docker run -d -p 5000:5000 myapp:1.0
Docker Compose
Docker Compose giúp định nghĩa và chạy nhiều container cùng lúc:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Best Practices
- Sử dụng official images khi có thể
- Giữ image size nhỏ gọn
- Một process cho mỗi container
- Sử dụng .dockerignore để loại bỏ file không cần thiết
- Không lưu secrets trong image
- Sử dụng multi-stage builds
Kết luận
Docker là công cụ mạnh mẽ giúp đơn giản hóa việc phát triển và triển khai ứng dụng. Với Docker, bạn có thể đảm bảo ứng dụng của mình chạy nhất quán trên mọi môi trường, từ development đến production.