Chạy nhiều tập lệnh python trong dockerfile

Vì, hình ảnh cơ sở là Ubuntu, chúng ta có thể chạy các lệnh Ubuntu tại đây. Các lệnh trên cài đặt python trên Ubuntu

Thêm tệp python in Hello World đơn giản vào hệ thống tệp của bộ chứa bằng lệnh ADD

ADD hello.py /home/hello.py
ADD a.py /home/a.py

Chúng tôi sẽ đặt lời chào của chúng tôi. py và một. py trong chính thư mục vừa tạo (/test). Lệnh ADD sẽ sao chép nó từ /test (thư mục làm việc hiện tại) của hệ thống máy chủ sang hệ thống tệp của vùng chứa tại /home. Các thư mục đích trong vùng chứa sẽ được tạo trong trường hợp chúng không tồn tại

Mã xin chào. py

Mã cho một. py

print ("Overriden Hello")

Chỉ định môi trường thực thi mặc định cho vùng chứa bằng CMD và ENTRYPOINT

Các từ khóa này cho phép chúng tôi xác định môi trường thực thi mặc định cho một vùng chứa khi nó vừa mới bắt đầu từ một hình ảnh hoặc mới bắt đầu. Nếu một lệnh được chỉ định bằng từ khóa CMD, thì đó là lệnh đầu tiên mà vùng chứa thực thi ngay khi nó khởi tạo từ một hình ảnh. Tuy nhiên, lệnh và đối số được cung cấp bằng CMD có thể bị ghi đè nếu người dùng chỉ định lệnh của riêng mình trong khi chạy vùng chứa bằng lệnh 'docker run'. ’

ENTRYPOINT giúp tạo vùng chứa thực thi và các lệnh và đối số được cung cấp với từ khóa này không bị ghi đè

Chúng tôi cũng có thể cung cấp môi trường ứng dụng mặc định bằng cách sử dụng ENTRYPOINT và các đối số mặc định được truyền cho nó thông qua từ khóa CMD. Điều này có thể được thực hiện như sau

CMD ["/home/hello.py"]
ENTRYPOINT ["python"]

Vì vậy, chế độ ứng dụng mặc định của vùng chứa sẽ là python và nếu không có tên tệp nào khác được cung cấp làm đối số cho nó thì nó sẽ thực thi hello. py được đặt trong thư mục /home của nó

Lợi ích của việc này là người dùng có thể chọn một số tệp khác để chạy với cùng một ứng dụng trong thời gian chạy, tức là trong khi khởi chạy vùng chứa

Vì vậy, Dockerfile tổng thể của chúng tôi hiện trông như thế này

FROM ubuntu
MAINTAINER Prashansa Kulshrestha
RUN apt-get update
RUN apt-get install -y python
ADD hello.py /home/hello.py
ADD a.py /home/a.py
CMD ["/home/hello.py"]
ENTRYPOINT ["python"]

Xây dựng Dockerfile

Để tạo một image từ Dockerfile, chúng ta cần build nó. Điều này được thực hiện như sau

[node1] (local) [email protected] ~
$ cd /test
0

Tùy chọn -t cho phép chúng tôi gắn thẻ hình ảnh của mình bằng tên mà chúng tôi mong muốn. Vì vậy, ở đây chúng tôi đã đặt tên cho hình ảnh của mình là 'pythonimage'. Các '. ' cuối cùng chỉ định thư mục làm việc hiện tại i. e. /kiểm tra. Chúng tôi đã bắt đầu quá trình xây dựng của mình từ đây. Docker sẽ tìm tệp có tên 'Dockerfile' trong thư mục hiện tại để xử lý bản dựng

Chạy một vùng chứa từ hình ảnh mới được tạo

[node1] (local) [email protected] ~
$ cd /test
1

Vì vậy, ở đây /home/xin chào. py được đặt trong vùng chứa được thực thi và hiển thị đầu ra 'Xin chào thế giới', vì nó được chỉ định làm mặc định với từ khóa CMD

[node1] (local) [email protected] ~
$ cd /test
2

Tại đây, người dùng đã chỉ định một tệp khác để chạy với python (ứng dụng mặc định cho vùng chứa này). Vì vậy, tệp được chỉ định bằng CMD đã bị ghi đè và chúng tôi đã thu được đầu ra từ /home/a. py

Ghi chú. Nếu bạn muốn chứa một ứng dụng web Django hoặc Flask hoàn chỉnh, bạn có thể bắt đầu với một trong các mẫu sau

  • python-sample-vscode-django-tutorial, đây là kết quả của việc làm theo Hướng dẫn Django

  • python-sample-vscode-flask-tutorial, đây là kết quả của việc làm theo Hướng dẫn Flask

Ghi chú. Đối với hướng dẫn này, hãy đảm bảo sử dụng nhánh hướng dẫn của repos mẫu

Sau khi xác minh ứng dụng của bạn chạy đúng cách, bây giờ bạn có thể chứa ứng dụng của mình

Thêm tệp Docker vào dự án

  1. Mở thư mục dự án trong Mã VS

  2. Mở Bảng lệnh ( ⇧⌘P (Windows, Linux Ctrl+Shift+P< . Thêm tệp Docker vào không gian làm việc. )) and choose Docker: Add Docker Files to Workspace...:

    Chạy nhiều tập lệnh python trong dockerfile

  3. Khi được nhắc về loại ứng dụng, hãy chọn Python. Django, Python. Flask hoặc Python. Chung như loại ứng dụng. Đối với hướng dẫn này, chúng ta sẽ tập trung vào Python. Trường hợp chung, nhưng cũng sẽ bao gồm ghi chú cho Django và Flask

  4. Nhập đường dẫn tương đối đến điểm vào của ứng dụng. Điều này loại trừ thư mục không gian làm việc mà bạn bắt đầu từ đó. Nếu bạn đã tạo một ứng dụng python với hello.py theo hướng dẫn Bắt đầu với Python, hãy chọn ứng dụng đó

    Django. Chọn manage.py (thư mục gốc) hoặc subfolder_name/manage.py. xem

    Bình giữ nhiệt. Chọn đường dẫn đến nơi bạn tạo phiên bản Flask của mình. Xem tài liệu Flask chính thức

    Mẹo. Bạn cũng có thể nhập đường dẫn đến tên thư mục miễn là thư mục này bao gồm tệp __main__.py

  5. Chọn số cổng. Chúng tôi khuyên bạn nên chọn cổng 1024 trở lên để giảm thiểu những lo ngại về bảo mật từ. Mọi cổng không sử dụng sẽ chuyển, nhưng Django và Flask sử dụng các cổng mặc định tiêu chuẩn

    Django. Cổng mặc định 8000

    Bình giữ nhiệt. Cổng mặc định là 5000

  6. Khi được nhắc bao gồm Docker Compose, hãy chọn Không nếu bạn không muốn có tệp Docker Compose. Nếu bạn chọn Có, bạn sẽ cần xác minh đường dẫn đến tệp wsgi.py của mình trong Dockerfile để chạy lệnh Soạn thư thành công. Compose thường được sử dụng khi chạy nhiều container cùng một lúc

  7. Với tất cả thông tin này, tiện ích mở rộng Docker tạo các tệp sau

    • Một Dockerfile. Để tìm hiểu thêm về IntelliSense trong tệp này, hãy tham khảo tổng quan

    • Tệp

      from flask import Flask
      app = Flask(__name__) # Flask instance named app
      
      2 để giảm kích thước hình ảnh bằng cách loại trừ các tệp và thư mục không cần thiết, chẳng hạn như
      from flask import Flask
      app = Flask(__name__) # Flask instance named app
      
      3,
      from flask import Flask
      app = Flask(__name__) # Flask instance named app
      
      4 và
      from flask import Flask
      app = Flask(__name__) # Flask instance named app
      
      5

    • Nếu bạn đang sử dụng Docker Compose, tệp

      from flask import Flask
      app = Flask(__name__) # Flask instance named app
      
      6 và
      from flask import Flask
      app = Flask(__name__) # Flask instance named app
      
      7

    • Nếu chưa tồn tại, tệp

      from flask import Flask
      app = Flask(__name__) # Flask instance named app
      
      8 để nắm bắt tất cả các phụ thuộc của ứng dụng

    Lưu ý quan trọng. Để sử dụng thiết lập của chúng tôi, khung Python (Django/Flask) và Gunicorn phải được đưa vào tệp

    from flask import Flask
    app = Flask(__name__) # Flask instance named app
    
    8. Nếu môi trường ảo/máy chủ đã cài đặt các điều kiện tiên quyết này và được cho là giống với môi trường vùng chứa, hãy đảm bảo rằng các phần phụ thuộc của ứng dụng được chuyển qua bằng cách chạy
    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
    
    0 trong thiết bị đầu cuối. Thao tác này sẽ ghi đè lên tệp
    from flask import Flask
    app = Flask(__name__) # Flask instance named app
    
    8 hiện tại của bạn

(Tùy chọn) Thêm biến môi trường vào hình ảnh

Bước này không bắt buộc nhưng được đưa vào để giúp bạn hiểu cách thêm các biến môi trường cần đặt trong môi trường của vùng chứa

Tiện ích mở rộng Docker giúp bạn tạo Dockerfiles bằng cách sử dụng IntelliSense để cung cấp tính năng tự động hoàn thành và trợ giúp theo ngữ cảnh. Để xem tính năng này hoạt động

  1. Mở Dockerfile

  2. Bên dưới câu lệnh

    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
    
    3, nhập ⌃Dấu cách (Windows, Linux Ctrl+Dấu cách) to trigger IntelliSense and scroll to
    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
    
    4.

    Chạy nhiều tập lệnh python trong dockerfile

  3. Nhấn Tab hoặc Enter để hoàn thành câu lệnh, .

Để biết thêm thông tin về cài đặt và sử dụng các biến môi trường trong Dockerfile, hãy xem hướng dẫn và phần trong tài liệu Docker

Sửa đổi Gunicorn cho ứng dụng Django và Flask

Để cung cấp cho các nhà phát triển web Python một điểm khởi đầu tuyệt vời, chúng tôi đã chọn sử dụng làm máy chủ web mặc định. Vì nó được tham chiếu trong Dockerfile mặc định nên nó được bao gồm như một phần phụ thuộc trong tệp

from flask import Flask
app = Flask(__name__) # Flask instance named app
8. Nếu bạn không nhìn thấy nó trong
from flask import Flask
app = Flask(__name__) # Flask instance named app
8, hãy chạy
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
9 rồi chạy
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
0 để tạo lại tệp
from flask import Flask
app = Flask(__name__) # Flask instance named app
8

  • Django. Để sử dụng Gunicorn, nó phải liên kết với một ứng dụng có thể gọi được (thứ mà máy chủ ứng dụng sử dụng để giao tiếp với mã của bạn) làm điểm vào. Có thể gọi được này được khai báo trong tệp wsgi.py của ứng dụng Django. Để thực hiện ràng buộc này, dòng cuối cùng trong Dockerfile cho biết

    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "{workspace_folder_name}.wsgi"]
    

    Nếu dự án của bạn không tuân theo cấu trúc dự án mặc định của Django (nghĩa là thư mục không gian làm việc và tệp wsgi. py > trong thư mục con có tên giống như không gian làm việc), bạn phải ghi đè điểm nhập Gunicorn trong Dockerfile để tìm đúng tệp wsgi.py

    Nếu tệp wsgi.py của bạn nằm trong thư mục gốc, đối số cuối cùng trong lệnh trên sẽ là Dockerfile5. Trong các thư mục con, đối số sẽ là Dockerfile6

  • Bình giữ nhiệt. Để sử dụng Gunicorn, nó phải liên kết với một ứng dụng có thể gọi được (thứ mà máy chủ ứng dụng sử dụng để giao tiếp với mã của bạn) làm điểm vào. Có thể gọi này tương ứng với vị trí tệp và tên biến của phiên bản Flask đã tạo của bạn. Theo Tài liệu Flask chính thức, người dùng thường tạo một phiên bản Flask trong mô-đun chính hoặc trong tệp Dockerfile7 của gói của họ theo cách này

    from flask import Flask
    app = Flask(__name__) # Flask instance named app
    

    Để thực hiện ràng buộc này, dòng cuối cùng trong Dockerfile cho biết

    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
    

    Trong Docker. Thêm tệp Docker vào không gian làm việc. lệnh, bạn định cấu hình đường dẫn đến phiên bản Flask, tuy nhiên, tiện ích mở rộng Docker giả sử biến phiên bản Flask của bạn có tên là Dockerfile8. Nếu không phải như vậy, bạn phải thay đổi tên biến trong Dockerfile

    Nếu mô-đun chính của bạn nằm trong thư mục gốc dưới dạng một tệp có tên là Dockerfile9 và có một biến đối tượng Flask được đặt tên là docker0, thì đối số cuối cùng trong lệnh trên sẽ là docker1. Trong các thư mục con, đối số sẽ là docker2

Xây dựng, chạy và gỡ lỗi vùng chứa

Docker. Thêm tệp Docker vào không gian làm việc. lệnh tự động tạo cấu hình khởi chạy Docker để xây dựng và chạy vùng chứa của bạn ở chế độ gỡ lỗi. Để gỡ lỗi vùng chứa ứng dụng Python của bạn

  1. Điều hướng đến tệp chứa mã khởi động ứng dụng của bạn và đặt điểm ngắt

  2. Điều hướng đến Run and Debug và chọn Docker. Python - Chung, Docker. Python - Django hoặc Docker. Python - Flask, khi thích hợp

    Chạy nhiều tập lệnh python trong dockerfile

  3. Bắt đầu gỡ lỗi bằng phím F5 .

    • Bản dựng hình ảnh Docker
    • Bộ chứa Docker chạy
    • Trình gỡ lỗi python dừng ở điểm dừng
  4. Bước qua dòng này một lần

  5. Khi đã sẵn sàng, nhấn tiếp tục

Tiện ích mở rộng Docker sẽ khởi chạy trình duyệt của bạn tới một cổng được ánh xạ ngẫu nhiên

Chạy nhiều tập lệnh python trong dockerfile

Mẹo. Để sửa đổi cài đặt bản dựng Docker của bạn, chẳng hạn như thay đổi thẻ hình ảnh, hãy điều hướng đến docker3 bên dưới thuộc tính docker4 trong tác vụ docker5. Sử dụng IntelliSense trong tệp ( ⌃Space (Windows, Linux Ctrl+Space)) to display all other valid directives.

Sử dụng Docker Explorer

Docker Explorer cung cấp trải nghiệm tương tác để kiểm tra và quản lý các tài sản Docker như vùng chứa, hình ảnh, v.v. Để xem một ví dụ

  1. Điều hướng đến Docker Explorer

  2. Trong tab Vùng chứa, nhấp chuột phải vào vùng chứa của bạn và chọn Xem Nhật ký

    Chạy nhiều tập lệnh python trong dockerfile

  3. Đầu ra sẽ được hiển thị trong thiết bị đầu cuối

Xây dựng hình ảnh trong Azure

Bạn có thể sử dụng lệnh Azure Container Registry. Xây dựng hình ảnh trong Azure để xây dựng hình ảnh mà sau đó bạn có thể triển khai sang Dịch vụ ứng dụng Azure

  1. Cài đặt tiện ích mở rộng tài khoản Azure. Mở Bảng lệnh ( ⇧⌘P (Windows, Linux Ctrl+Shift+P)) and search for the command Azure: Sign In. If you don't have an Azure account, you can sign up for a free trial.

  2. Có hai cách để gọi lệnh xây dựng trong Azure. Bạn có thể nhấp chuột phải vào Dockerfile và chọn Build Image in Azure. Bạn cũng có thể sử dụng Bảng lệnh ( ⇧⌘P (Windows, Linux Ctrl+Shift+P)) and search for the command Azure Container Registry: Build Image in Azure.

    Chạy nhiều tập lệnh python trong dockerfile

  3. Chọn tên và thẻ cho hình ảnh được xây dựng. Bạn sẽ sử dụng điều này để xác định nó trong sổ đăng ký vùng chứa

    Chạy nhiều tập lệnh python trong dockerfile

  4. Chọn đăng ký Azure bạn muốn sử dụng

  5. Chọn Sổ đăng ký bộ chứa Azure hiện có hoặc tạo một sổ đăng ký mới. Khi bạn tạo một tài khoản mới, bạn được yêu cầu cung cấp tên, nhóm tài nguyên, vị trí và tùy chọn định giá, chẳng hạn như Cơ bản, Tiêu chuẩn hoặc Cao cấp. Bạn có thể đọc về chi phí của các tùy chọn này tại Định giá - Đăng ký vùng chứa

  6. Chỉ định hệ điều hành cơ sở, Linux hoặc Windows. Lựa chọn này phải phù hợp với Dockerfile

    Chạy nhiều tập lệnh python trong dockerfile

Quá trình xây dựng hình ảnh có thể mất vài phút. Bạn có thể theo dõi tiến trình trong thiết bị đầu cuối. Nếu bạn gặp lỗi (docker6), hãy thử sử dụng tùy chọn Làm mới trên sổ đăng ký vùng chứa rồi yêu cầu một bản dựng khác. Trước khi xây dựng lại, hãy xóa hình ảnh cũ theo cách thủ công

Triển khai cho Dịch vụ ứng dụng Azure

Sau khi hình ảnh vùng chứa được tạo, nó sẽ xuất hiện trong Cơ quan đăng ký vùng chứa với thẻ bạn đã chỉ định. Bây giờ nó đã được xây dựng, bạn có thể triển khai nó vào Dịch vụ ứng dụng Azure. Bạn không cần cài đặt tiện ích mở rộng Dịch vụ ứng dụng Azure để bắt đầu, mặc dù tiện ích này có thể hữu ích để quản lý dịch vụ ứng dụng. Bạn có thể cài đặt nó từ Dịch vụ ứng dụng Azure, nhưng chúng tôi khuyên bạn nên cài đặt gói tiện ích mở rộng Công cụ Azure, gói này bao gồm một gói công cụ dành cho nhiều tình huống phát triển Azure

  1. Nhấp chuột phải vào thẻ hình ảnh và chọn Deploy Image to to Azure App Service

    Chạy nhiều tập lệnh python trong dockerfile

  2. Cung cấp tên của trang web. Đây phải là một tên duy nhất và đối với các ứng dụng Django, nó cũng phải được liệt kê dưới dạng tên máy chủ hợp lệ trong danh sách docker7 trong tệp docker8

  3. Cung cấp nhóm tài nguyên, vị trí và Gói dịch vụ ứng dụng. Nếu bạn mới bắt đầu, bạn có thể chọn gói miễn phí

  4. Hình ảnh được triển khai; . Khi nó được triển khai, một thông báo sẽ xuất hiện với một nút mà bạn có thể sử dụng để truy cập trang web. Bạn cũng có thể sử dụng địa chỉ của trang web, docker9 trong đó hello.py0 là tên bạn đã đặt khi tạo trang web. Nếu nó không hoạt động lúc đầu, hãy thử lại sau vài phút. Không có gì lạ khi một vài lần thử đầu tiên hết thời gian chờ hoặc trả về lỗi. Điều đó chỉ có nghĩa là Dịch vụ ứng dụng chưa sẵn sàng nhận yêu cầu

  5. Thực hiện một thay đổi nhỏ trong mã ứng dụng hiển thị trên một trong các trang và lưu tệp

  6. Sử dụng biểu tượng Azure để mở dạng xem Tài nguyên và mở rộng nút cho đăng ký của bạn để tìm Dịch vụ ứng dụng mà bạn đã triển khai ở bước trước

  7. Nhấp chuột phải vào nút Dịch vụ ứng dụng và xem các tùy chọn khả dụng. Chọn Deploy to Web App, sau đó chỉ định thư mục ứng dụng của bạn để triển khai nó

    Chạy nhiều tập lệnh python trong dockerfile

    Khi được cảnh báo rằng điều này sẽ ghi đè lên triển khai trước đó, hãy chọn Triển khai để xác nhận

    Điều này có lẽ tốn một vài phút; . Khi nó kết thúc, một nút có quyền truy cập vào trang web được cung cấp

    Chạy nhiều tập lệnh python trong dockerfile

    Sử dụng nút và xác minh rằng thay đổi của bạn được phản ánh trên trang web

Xin chúc mừng, bạn đã sử dụng Python trong Mã VS để tạo triển khai một trang web được lưu trữ trên đám mây và trực tuyến trên internet

Giải phóng tài nguyên

Trong cổng Azure, xóa Nhóm tài nguyên để giải phóng tất cả các tài nguyên mà bạn đã tạo trong bài tập này

Làm cách nào để chạy tập lệnh python trong Dockerfile?

Điều này đã đạt được thông qua một loạt các bước. .
Bước 1. Tạo tập tin và thư mục
Bước 2. Tạo Dockerfile
Bước 3. Xây dựng Docker Container
Bước 4. Xác minh bản dựng hình ảnh
Bước 5. Chạy bộ chứa Docker

Bạn có thể chạy nhiều quy trình trong bộ chứa Docker không?

Bạn có thể có nhiều quy trình , nhưng để tận dụng tối đa Docker, hãy tránh để một vùng chứa chịu trách nhiệm cho nhiều khía cạnh của ứng dụng tổng thể của bạn. Bạn có thể kết nối nhiều vùng chứa bằng mạng do người dùng xác định và khối lượng chia sẻ.

Chúng tôi có thể có nhiều CMD trong tệp Docker không?

Chỉ có thể có một lệnh CMD trong Dockerfile . Nếu bạn liệt kê nhiều CMD thì chỉ CMD cuối cùng có hiệu lực. Nếu CMD được sử dụng để cung cấp các đối số mặc định cho lệnh ENTRYPOINT, thì cả lệnh CMD và ENTRYPOINT phải được chỉ định với định dạng mảng JSON.

Chúng tôi có thể thực thi nhiều phiên bản của hình ảnh Docker không?

Nếu bạn đang mong đợi nó hoạt động giống như khi chạy một vùng chứa, thì điều đó sẽ không xảy ra. Nếu không có lý do cụ thể để sử dụng phiên bản. '3' bạn có thể sử dụng phiên bản. '2' thay vì. Hoặc bạn có thể để nó tạo mạng riêng, điều này thực hiện với tệp docker-compose hiện tại của bạn