Python là một ngôn ngữ lập trình linh hoạt, nhưng việc chạy nó có thể hơi khó khăn khi bạn phải quản lý các phần phụ thuộc của nó—đặc biệt là khi bạn đang chia sẻ dự án với các nhà phát triển khác
Một giải pháp là sử dụng Docker. Công cụ container hóa chạy các ứng dụng trong một hệ thống biệt lập và quản lý các phụ thuộc. Nó tiết kiệm chi phí, hiệu quả cho việc triển khai CI/CD, có thể mở rộng và dễ sử dụng, làm cho nó trở thành một lựa chọn tốt cho các ứng dụng Python của bạn
Hướng dẫn này sẽ chỉ cho bạn cách xây dựng bộ chứa Docker để chạy một ứng dụng Python đơn giản. Nếu bạn muốn theo dõi dự án này, bạn có thể sao chép repo GitHub
điều kiện tiên quyết
Bạn sẽ cần những điều sau đây cho hướng dẫn này
- Trăn 3. 9. 9
- docker 20. 10. 5, sử dụng bản dựng 55c4c88
Thiết lập Dockerfile
Trước tiên, bạn sẽ thiết lập Dockerfile, đây là một tập hợp các lệnh tuần tự được sử dụng để xây dựng hình ảnh Docker. Đối với điều này, bạn sẽ sử dụng
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
8, một biến môi trường Python cho phép đầu ra Python được gửi thẳng đến thiết bị đầu cuối khi được đặt thành một chuỗi không trống hoặc được thực thi với tùy chọn FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
0 trên dòng lệnhĐiều này rất hữu ích khi cần thông báo tường trình trong thời gian thực. Nó cũng ngăn các sự cố như ứng dụng bị treo mà không cung cấp thông tin chi tiết liên quan do thông báo bị "kẹt" trong bộ đệm
Tạo một thư mục dự án và thay đổi thư mục bằng cách sử dụng
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
1Chạy các lệnh bên dưới để tạo môi trường ảo. Điều này cô lập môi trường cho dự án Python để nó không ảnh hưởng hoặc bị ảnh hưởng bởi các dự án Python khác đang chạy trên môi trường cục bộ. Mọi phụ thuộc được cài đặt sẽ không can thiệp vào các dự án Python khác
python3 -m venv
source /bin/activate
Sử dụng đoạn mã sau, tạo một tệp mới có tên
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
2 trong thư mục dự án trốngFROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
Mã này kéo hình ảnh cơ sở từ
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
3 và đảm bảo đầu ra được gửi thẳng đến thiết bị đầu cuối. Nó xác nhận vị trí thư mục làm việc hiện tại, ứng dụng Python sẽ được sao chép vào thư mục hiện tại và các gói trong FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
4 sẽ được cài đặtlưu và đóng tập tin
Tạo ứng dụng Python
Tạo một tệp
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
5 và sao chép mã bên dưới________số 8
Lưu và đóng. Điều này tạo ra một ứng dụng web Python đơn giản hiển thị văn bản
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
6Tạo tệp
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
4. Điều này sẽ chứa các phụ thuộc cần thiết để ứng dụng chạyThư mục làm việc bây giờ trông như thế này
Chạy lệnh sau trong terminal để cài đặt khung Flask cần thiết để chạy ứng dụng Python và thêm chúng vào tệp
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
4. FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
9 hiển thị tất cả các gói được cài đặt qua pipFROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
3Tệp
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
4 không còn trống nữaFROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
5Kiểm tra xem ứng dụng có hoạt động không bằng cách sử dụng
from flask import Flask
app = Flask[__name__]
@app.route['/']
def hello_world[]:
return 'Hello, Docker!'
1 rồi điều hướng đến http. //máy chủ cục bộ. 5000 trong trình duyệt ưa thích của bạnXây dựng Docker Image và Container
Bây giờ Dockerfile,
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
4 và FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
5 đã được tạo, bạn nên thử nghiệm ứng dụng Python trên môi trường cục bộ của mình để đảm bảo ứng dụng hoạt độngBạn sẽ xây dựng Docker image từ Dockerfile đã tạo. Hình ảnh này là một tập hợp các lệnh chỉ đọc được sử dụng trong quá trình xây dựng và triển khai bộ chứa Docker
Để xây dựng hình ảnh Docker, hãy sử dụng lệnh
from flask import Flask
app = Flask[__name__]
@app.route['/']
def hello_world[]:
return 'Hello, Docker!'
4. Thông lệ là sử dụng các thẻ; Bạn sẽ thấy một cái gì đó như thế này
Gõ
from flask import Flask
app = Flask[__name__]
@app.route['/']
def hello_world[]:
return 'Hello, Docker!'
6 vào terminal để xem ảnh vừa tạoGắn thẻ hình ảnh bằng cách sử dụng
from flask import Flask
app = Flask[__name__]
@app.route['/']
def hello_world[]:
return 'Hello, Docker!'
7python3 -m venv
source /bin/activate
3Bây giờ hình ảnh Docker đã được tạo và gắn thẻ, hãy chạy hình ảnh bằng cách sử dụng
from flask import Flask
app = Flask[__name__]
@app.route['/']
def hello_world[]:
return 'Hello, Docker!'
8 để xây dựng vùng chứaSau đó, sử dụng
from flask import Flask
app = Flask[__name__]
@app.route['/']
def hello_world[]:
return 'Hello, Docker!'
9 để xem danh sách các container hiện tạiBây giờ bạn có thể kiểm tra ứng dụng của mình bằng http. //máy chủ cục bộ. 5000 trên trình duyệt ưa thích của bạn. Bạn đã chạy ứng dụng Python của mình bên trong bộ chứa Docker
Chạy Docker Push
Hình ảnh vùng chứa có thể được đẩy và truy xuất từ sổ đăng ký Docker Hub. Docker Hub là một thư viện mã nguồn mở và cộng đồng cho container image. Hình ảnh được đẩy có thể được chia sẻ giữa các nhóm, khách hàng và cộng đồng. Nó sử dụng một lệnh duy nhất,
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
30Để có tên người dùng trung tâm, hãy đăng ký trên trang web. Sau đó, nhấp vào Tạo kho lưu trữ ở góc trên cùng bên phải của trang
Đặt tên và mô tả cho repo, sau đó nhấp vào Tạo
Bạn sẽ được tự động chuyển đến trang hiển thị bên dưới
Sao chép lệnh ở bên phải trang vào thiết bị đầu cuối của bạn, thay thế
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
31 bằng một phiên bản hoặc bằng từ from flask import Flask
app = Flask[__name__]
@app.route['/']
def hello_world[]:
return 'Hello, Docker!'
5Trong thiết bị đầu cuối của bạn, hãy chạy lệnh
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
33 để kết nối kho lưu trữ từ xa với môi trường cục bộ. Thêm tên người dùng và mật khẩu của bạn để xác thực thông tin đăng nhập của bạn, như hình bên dướiChạy lệnh
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
34Xác nhận rằng hình ảnh của bạn đã được đẩy bằng cách tải lại trang Docker Hub
Trong bất kỳ thiết bị đầu cuối nào, hãy chạy
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
35 để kéo hình ảnh DockerChạy Docker Compose
Bây giờ bạn có thể xây dựng, chạy, đẩy và kéo hình ảnh Docker. Còn việc xây dựng nhiều container thì sao?
Docker Compose được sử dụng trong quá trình
- Môi trường kiểm thử tự động. Docker Compose giúp dễ dàng tạo và hủy các môi trường bị cô lập trong quá trình thử nghiệm để tích hợp liên tục và phân phối liên tục [CI/CD] bằng cách sử dụng các lệnh đơn giản như
36FROM python:3.8-slim-buster ENV PYTHONUNBUFFERED=1 WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . EXPOSE 5000 CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
- môi trường phát triển. Một khía cạnh quan trọng của phát triển phần mềm là sự cô lập của các môi trường. Docker Compose tạo các môi trường này và cho phép bạn tương tác, lập tài liệu và định cấu hình tất cả các phụ thuộc dịch vụ của ứng dụng
Một tệp
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
37 đơn giản trông như thế nàyFROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
4Sử dụng Docker Volumes
Đôi khi Docker image và container vô tình bị xóa. Khối lượng docker giúp duy trì các vùng chứa và hình ảnh này để lưu trữ dữ liệu, vì vậy bạn không bị mất bất cứ thứ gì trong trường hợp vô tình xóa
Để hiển thị khối lượng, sử dụng
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
38Hiện tại không có khối lượng trên hệ thống này. Để tạo âm lượng trong thiết bị đầu cuối, hãy chạy
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
39 và sử dụng lại FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
38 để xác nhận âm lượng đã được tạoSử dụng
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
51, kiểm tra ổ đĩa để xem thông tin quan trọng về nóHiện tại không có thùng chứa nào được đính kèm với tập này. Đính kèm vùng chứa vào ổ đĩa bằng cách sử dụng như sau
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
9Chạy
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
52 và cuộn xuống phần FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
53 để xác nhận xem ổ đĩa đã được gắn vào thùng chứa chưaKiểm tra tính bền bỉ
Chạy
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
54 để chạy phiên tương tác với vùng chứa bằng Ubuntu làm hình ảnh cơ sởĐể kiểm tra hệ thống tệp, hãy
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
55 vào thư mục ứng dụng, tạo tệp và thoátLiệt kê các bộ chứa Docker và xóa bộ chứa
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
56 bằng cách sử dụng FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
57FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
6Tạo một vùng chứa tương tác khác sử dụng cùng một ổ đĩa,
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=5000"]
55 vào ứng dụng vùng chứa và xem các tệp của nó. Bạn sẽ thấy rằng tệp vẫn tồn tại mặc dù vùng chứa đã bị hủyPhần kết luận
Sử dụng Docker cung cấp cho bạn rất nhiều tùy chọn cho các ứng dụng Python của bạn. Như bạn đã thấy trong hướng dẫn này, bạn có thể sử dụng Docker để kiểm tra và lưu trữ ứng dụng của mình và thậm chí bảo vệ dữ liệu của bạn trong trường hợp vô tình xóa. Hình ảnh bộ chứa docker rất linh hoạt và có thể được lưu vào bộ đệm để sử dụng ở mọi nơi
Bạn có thể tối ưu hóa việc sử dụng vùng chứa của mình hơn nữa với Earthly, một cú pháp cho các bản dựng có thể lặp lại. Các bản dựng tự động, khép kín của nó giúp cuộc sống của bạn dễ dàng hơn bằng cách cải thiện quy trình làm việc của bạn
Để xem toàn bộ dự án hướng dẫn cùng một lúc, hãy xem repo GitHub
Trong khi bạn ở đây
Earthly là khung CI/CD dễ dàng.
Phát triển đường dẫn CI/CD cục bộ và chạy chúng ở mọi nơi.
Adedoyin Adeyemi
Tôi khởi nghiệp với tư cách là nhà phát triển giao diện người dùng và sau đó tham gia trại huấn luyện đám mây được tổ chức cùng với đối tác đám mây số một của Google ở Châu Phi