Giới thiệu
Trong thế giới phát triển phần mềm ngày nay, Docker đã trở thành một công cụ không thể thiếu cho việc triển khai ứng dụng. Bài viết này sẽ hướng dẫn bạn cách docker hóa và triển khai một ứng dụng Python một cách hiệu quả và đơn giản nhất.
Mục lục
- Tạo Dockerfile
- Xây dựng Docker Image
- Chạy Docker Container
- Kiểm tra Ứng Dụng
- Thực Hành Tốt Nhất
- Những Cạm Bẫy Thường Gặp
- Mẹo Tối Ưu Hiệu Suất
- Giải Quyết Sự Cố
1. Tạo Dockerfile
Bước đầu tiên là tạo một Dockerfile trong thư mục /python_app. Tệp này chứa các hướng dẫn để xây dựng hình ảnh Docker.
bash
[tony@stapp01 python_app]$ sudo vi Dockerfile
Nội dung tệp mà tôi sử dụng là:
dockerfile
# Sử dụng hình ảnh Python 3.9 slim làm cơ sở
FROM python:3.9-slim
# Thiết lập thư mục làm việc bên trong container
WORKDIR /app
# Sao chép tệp requirements.txt từ thư mục src/
COPY src/requirements.txt .
# Cài đặt các phụ thuộc
RUN pip install --no-cache-dir -r requirements.txt
# Sao chép mã nguồn ứng dụng từ thư mục src/
COPY src/ .
# Mở cổng 3003
EXPOSE 3003
# Chạy tệp server.py khi container bắt đầu
CMD ["python", "server.py"]
Quy trình này là tiêu chuẩn để thiết lập một ứng dụng Python bên trong một container Docker.
2. Xây dựng Docker Image
Tiếp theo, chúng ta cần xây dựng hình ảnh Docker bằng cách sử dụng lệnh docker build. Lệnh này sử dụng Dockerfile trong thư mục hiện tại (.) để tạo một hình ảnh mang tên nautilus/python-app.
bash
[tony@stapp01 python_app]$ docker build -t nautilus/python-app .
Kết quả xác nhận quá trình xây dựng thành công, hiển thị từng bước từ Dockerfile được thực thi:
bash
[+] Building 196.3s (10/10) FINISHED
=> [internal] load build definition from Dockerfile
=> [internal] load metadata for docker.io/library/python:3.9-slim
=> [internal] load .dockerignore
=> [1/5] FROM docker.io/library/python:3.9-slim
=> [internal] load build context
=> [2/5] WORKDIR /app
=> [3/5] COPY src/requirements.txt .
=> [4/5] RUN pip install --no-cache-dir -r requirements.txt
=> [5/5] COPY src/ .
=> exporting to image
=> => exporting layers
=> => writing image sha256:99f9bcece2819a222881e87b93f5779d9fa4cde460c25cb9a06f1d6c91c8f746
=> => naming to docker.io/nautilus/python-app
3. Chạy Docker Container
Khi hình ảnh đã được xây dựng, chúng ta có thể chạy một container từ nó. Lệnh docker run được sử dụng để tạo và khởi động một container. Cờ -d chạy container ở chế độ nền, --name đặt tên cho container, và -p ánh xạ cổng của container đến cổng của máy chủ.
bash
[tony@stapp01 python_app]$ docker run -d --name pythonapp_nautilus -p 8092:3003 nautilus/python-app
Kết quả là ID của container, xác nhận rằng nó đã khởi động thành công:
bash
e3c4697f371922f35dbb84d9077d73f64283918b481ee92bff184dff7c0683d7
4. Kiểm tra Ứng Dụng
Cuối cùng, hãy kiểm tra khả năng truy cập của ứng dụng. Đầu tiên, kiểm tra trên máy chủ nơi container đang chạy.
bash
[tony@stapp01 /]$ curl http://localhost:8092/
Welcome to xFusionCorp Industries!
Phản hồi "Welcome to xFusionCorp Industries!" xác nhận rằng ứng dụng đang chạy và có thể truy cập được trên stapp01.
Tiếp theo, kiểm tra từ một máy khác (jumphost) để xác nhận khả năng truy cập mạng. Bạn phải sử dụng tên máy chủ hoặc địa chỉ IP của máy chủ (stapp01) thay vì localhost.
bash
thor@jumphost ~$ curl http://stapp01:8092/
Welcome to xFusionCorp Industries!
Kết quả cuối cùng xác nhận rằng ứng dụng đã được triển khai thành công và có thể truy cập từ một máy chủ bên ngoài.
5. Thực Hành Tốt Nhất
- Sử dụng multi-stage builds: Giúp giảm kích thước hình ảnh cuối cùng bằng cách chỉ sao chép những gì cần thiết từ các bước xây dựng khác.
- Cập nhật thường xuyên: Đảm bảo rằng bạn thường xuyên cập nhật các hình ảnh Docker để bảo mật và hiệu suất.
6. Những Cạm Bẫy Thường Gặp
- Quên mở cổng: Đảm bảo rằng cổng mà ứng dụng của bạn sử dụng đã được mở trong Dockerfile và được ánh xạ đúng cách.
- Không cài đặt đúng các phụ thuộc: Kiểm tra kỹ tệp requirements.txt để đảm bảo rằng tất cả các phụ thuộc cần thiết đã được khai báo.
7. Mẹo Tối Ưu Hiệu Suất
- Sử dụng cache: Docker sử dụng cache cho các bước xây dựng, vì vậy hãy sắp xếp các lệnh sao cho những lệnh ít thay đổi nằm ở trên cùng.
- Giảm kích thước hình ảnh: Sử dụng các hình ảnh cơ sở nhẹ như
python:3.9-slimđể giảm kích thước hình ảnh Docker.
8. Giải Quyết Sự Cố
- Container không khởi động: Kiểm tra log của container bằng lệnh
docker logs <container_id>để tìm hiểu nguyên nhân. - Không truy cập được ứng dụng: Đảm bảo rằng firewall không chặn cổng và kiểm tra kết nối mạng.
Kết luận
Docker hóa và triển khai ứng dụng Python là một quy trình đơn giản nhưng mạnh mẽ. Bằng cách làm theo các bước này, bạn có thể triển khai ứng dụng của mình một cách nhanh chóng và hiệu quả. Hãy bắt đầu khám phá sức mạnh của Docker ngay hôm nay và nâng cao quy trình phát triển phần mềm của bạn! Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại để lại ý kiến dưới bài viết này.