2014-11-19 28 views
28

Để phát triển, chúng tôi sử dụng virtualenv để phát triển riêng biệt khi nói đến phụ thuộc. Từ this question có vẻ như việc triển khai các ứng dụng Python trong một yêu cầu .Virtualenv có phục vụ một mục đích (trong sản xuất) khi sử dụng docker không?

Bây giờ, chúng tôi đang bắt đầu sử dụng để triển khai. Điều này cung cấp một môi trường cô lập hơn vì vậy tôi đặt câu hỏi về việc sử dụng virtualenv bên trong một container docker. Trong trường hợp của một ứng dụng duy nhất tôi không nghĩ rằng virtualenv có một mục đích như docker đã cung cấp sự cô lập. Trong trường hợp có nhiều ứng dụng được triển khai trên một vùng chứa docker, tôi nghĩ virtualenv có mục đích là các ứng dụng có thể có các phụ thuộc xung đột.

Nên sử dụng virtualenv khi một ứng dụng đơn lẻ được triển khai trong vùng chứa docker?

Docker có chứa nhiều ứng dụng hoặc chỉ một ứng dụng cho mỗi vùng chứa không?

Nếu vậy, virtualenv có nên được sử dụng khi triển khai vùng chứa có nhiều ứng dụng không?

+1

Tôi nghĩ bạn có các câu hỏi phù hợp. Khi có một tập hợp các ứng dụng python để làm việc trên cùng một lúc, bạn sẽ cần virtualenv để tránh duyệt từ container đến container ... I'ld khuyên bạn nên sử dụng virtualenv theo mặc định, mặc dù container chỉ dành riêng để làm việc trên một ứng dụng duy nhất bởi vì ... bạn cũng không bao giờ biết. Và chi phí gây ra bởi virtualenv không cao như vậy :) – Rerito

+0

@Rerito Không có phí sử dụng docker. Nó chỉ đơn giản là một chroot tù trên Linux. – TechJS

Trả lời

37

Virtualenv đã được tạo lâu trước khi trình docker. Hôm nay, tôi nghiêng về phía docker thay vì virtualenv vì những lý do này:

  • Virtualenv vẫn có nghĩa là mọi người tiêu thụ sản phẩm của bạn cần tải trứng xuống. Với docker, họ nhận được một cái gì đó "được biết đến để làm việc". Không có chuỗi đính kèm.
  • Trình kết nối có thể hoạt động nhiều hơn virtualenv (như tạo môi trường trong sạch khi bạn có các sản phẩm cần các phiên bản Python khác nhau).

Hạn chế chính cho Docker là hỗ trợ Windows kém. Làm thay đổi với phiên bản dành cho Windows 10

Đối với "có bao nhiêu ứng dụng mỗi container", chính sách thông thường là 1.

+1

Để sử dụng docker trên Windows (hoặc OS X), tôi khuyên bạn nên sử dụng [boot2docker] (http://boot2docker.io/). – siebz0r

+1

5s là khá nhanh để khởi động docker trên Windows nhưng nó vẫn còn khoảng 100 lần chậm hơn so với thời gian bắt đầu trung bình trên Linux :-) –

+0

là những điểm vẫn còn áp dụng cho docker? (hỗ trợ windows nghèo) – Ani

9

Giới thiệu virtualenv là rất dễ dàng, vì vậy tôi muốn nói bắt đầu mà không có nó trên Docker của bạn thùng đựng hàng.

Nếu cần, thì có thể bạn có thể cài đặt. Chạy "pip freeze> requirements.txt" sẽ cung cấp cho bạn tất cả các gói python của bạn. Tuy nhiên, tôi nghi ngờ bạn sẽ cần ảo hóa bên trong một thùng chứa docker vì việc tạo một vùng chứa khác sẽ là một lựa chọn thích hợp hơn.

Tôi không khuyên bạn nên có nhiều ứng dụng trong một vùng chứa duy nhất. Khi bạn nhận được đến thời điểm này, container của bạn đang làm quá nhiều.

18

Có. Bạn vẫn nên sử dụng virtualenv. Ngoài ra, bạn nên xây dựng bánh xe thay vì trứng bây giờ. Cuối cùng, bạn nên đảm bảo rằng bạn giữ hình ảnh Docker gọn gàng và hiệu quả bằng cách xây dựng bánh xe của bạn trong một container với các công cụ xây dựng đầy đủ và cài đặt không có công cụ xây dựng vào container ứng dụng của bạn.

Bạn nên đọc bài viết tuyệt vời này.https://glyph.twistedmatrix.com/2015/03/docker-deploy-double-dutch.html

Chìa khóa lấy đi là

Đúng là trong nhiều trường hợp, thậm chí hầu hết, chỉ cần cài đặt thứ vào Python hệ thống với Pip hoạt động tốt; tuy nhiên, để có thêm các ứng dụng phức tạp, bạn có thể muốn gọi một công cụ được cung cấp bởi vùng chứa cơ sở của bạn được triển khai bằng Python, nhưng yêu cầu các phụ thuộc được quản lý bởi máy chủ. Bằng cách đặt mọi thứ vào virtualenv bất kể, chúng tôi giữ những thứ được thiết lập bởi hệ thống gói của hình ảnh cơ sở gọn gàng tách ra khỏi những thứ mà ứng dụng của chúng tôi đang xây dựng, có nghĩa là không có sự tương tác. sử dụng Python có thể.

+5

[PEP370] (https://www.python.org/dev/peps/pep-0370/) Giới thiệu cờ --user (trong năm 2008) cho phép cài đặt các gói trong $ HOME. Điều này đảm bảo 99% các trường hợp sử dụng mà tôi đã sử dụng để sử dụng virtualenv/pyvenv. Tốt để ghi nhớ, tôi nghĩ. – sthysel

+2

Tôi vừa nhận được phiếu bầu không có bình luận. Làm thế nào là hữu ích cho bất cứ ai? –

+1

Điều này có thể đúng nếu bạn sử dụng hệ điều hành chứa bloated như ubuntu mà họ sử dụng trong mẫu. Nhưng nếu bạn chọn hệ điều hành phù hợp, như Alpine, đây không phải là vấn đề. Tàu Alpine không có Python ra khỏi hộp, vì vậy bạn biết cài đặt Python của bạn là chỉ có bởi vì bạn cài đặt nó bởi vì ứng dụng của bạn cần nó. –

0

Nếu ai đó muốn thay thế virtualenv hoàn toàn bằng docker, anh ấy có thể.

Chỉ cần tạo Dockerfile khác cho môi trường khác nhau và sử dụng cổng và âm lượng khi bạn cần cho môi trường.

Ví dụ về phát triển, bạn có thể sử dụng số project này. Chạy docker soạn và bắt đầu mã hóa. Viết Dockerfiles của riêng bạn cho các môi trường khác nhau như thử nghiệm, dàn dựng và sản xuất bằng cách đặt nhật ký và dữ liệu của bạn theo khối lượng.

Liên kết này cũng hữu ích https://vsupalov.com/docker-python-development/.

Các vấn đề liên quan