Tại sao một nhà phát triển nên quan tâm đến Docker?


11

Nói chung một nhà phát triển quan tâm đến việc đáp ứng yêu cầu kinh doanh. Anh ấy / cô ấy có thể có chuyên môn trong một ngăn xếp cụ thể hoặc một khung. Nhưng anh ấy / cô ấy có nên nỗ lực học docker và đó là các phương thức triển khai khác nhau (swarm, kube, mesos, v.v.)?

Đơn giản chỉ cần đặt tại sao một nhà phát triển nên quan tâm đến docker?

PS: Câu hỏi phụ huynh cho bài đăng này là Ý nghĩa của việc giới thiệu docker cho nhóm phát triển

Câu trả lời:


7

Có lẽ không phải là câu trả lời mà bạn đang tìm kiếm, nhưng dù sao cũng là một câu trả lời :)

Tìm hiểu về docker và các phương thức triển khai của nó thực sự có thể được bao gồm trong các yêu cầu nghiệp vụ bằng cách biến nó thành một phần của môi trường phát triển dự án hoặc nhóm, giống như ngôn ngữ mã, hệ thống kiểm soát phiên bản, trình biên dịch, cơ sở hạ tầng kiểm tra, v.v. nhóm đó hoặc trong dự án đó người ta cần biết và sử dụng tất cả những thứ này, không thể "mang theo của riêng bạn" (trong hầu hết các trường hợp).

Mọi thứ trở nên phức tạp hơn một chút nếu "nhà phát triển" thực sự có nghĩa là phần lớn hoặc thậm chí toàn bộ nhóm phát triển. Đẩy một công cụ trong môi trường phát triển mà không thực sự có bất kỳ nhà phát triển nào hỗ trợ nó sẽ thực sự khó khăn. Dành thời gian để tạo một người hỗ trợ như vậy trước tiên từ lãnh đạo kỹ thuật của đội.

Lưu ý bên lề: có thể không cần thiết cho mỗi và mọi nhà phát triển trong nhóm để trở thành một chuyên gia về docker. Các công thức sử dụng được thiết lập sẵn được gói trong các lệnh đơn giản, sẵn sàng cho phép các nhà phát triển sử dụng các giải pháp dựa trên docker mà không thực sự biết quá nhiều về hoạt động bên trong của họ, điều này có thể được chấp nhận, đặc biệt là trong các nhóm lớn. Giống như có thể đóng góp mã mà không cần biết tất cả các chi tiết về cách sản phẩm cuối cùng được xây dựng.


Ngoài ra, bạn có thể xây dựng trên bất kỳ công nghệ nào bạn muốn, cung cấp cho bạn ít hạn chế hơn và bớt đau đầu hơn cho các sysadins để hỗ trợ tất cả các công nghệ khác nhau. Và vì "dev" quyết định công nghệ, nên tùy thuộc vào cấu hình môi trường docker.
DarkMukke

@DarkMukke "dev" không phải lúc nào cũng quyết định công nghệ ... Hoàn toàn ngược lại thường đúng trong các nhóm dev lớn hơn - "dev" chỉ sử dụng bất kỳ công nghệ nào mà nhóm sử dụng. Các ngoại lệ có thể được chấp nhận nếu chúng không can thiệp hoặc tác động tiêu cực đến các hoạt động của nhóm.
Dan Cornilescu

Tôi một phần đồng ý, nhưng tôi đã thấy các công ty phát triển lớn (200+) làm việc với docker theo cách tôi mô tả. Tôi nghĩ đó là vấn đề lựa chọn cá nhân của không chỉ các nhóm phát triển mà cả các nhân viên quản lý ở trên họ. Nếu có tín đồ tốt, số lượng docker một dev cần thường không đáng kể.
DarkMukke

6

Tôi sẽ cho bạn quan điểm của tôi. Các nhà phát triển nên quan tâm đến docker vì có những nhà phát triển khác sẵn sàng sử dụng docker và đã xây dựng chuyên môn về nó. Họ sẵn sàng đảm nhận vai trò của một kỹ sư DevOps cùng với việc trở thành một nhà phát triển. Vì vậy, phần Ops của DevOps là những gì họ đang xây dựng chuyên môn.

Ngày nay, bạn sẽ tìm thấy ngày càng nhiều người có thể phát triển, sắp xếp, tự động hóa các bài kiểm tra, tự động hóa công việc và xây dựng các công cụ để giám sát và đưa gói hoàn chỉnh này vào sản xuất một tay. Đây là những kẻ đang đẩy docker và các công cụ khác trong cộng đồng nhà phát triển.

Ngoài ra, làn sóng của thị trường là hướng tới ảo hóa, tự động mở rộng quy mô, tự động hóa, học máy và docker phù hợp với tất cả những điều này. Nó đã trở nên rất bắt buộc để sử dụng docker. Các doanh nghiệp sẵn sàng trả gấp 2 lần cho một anh chàng duy nhất đảm nhận tất cả các trách nhiệm này và khi có nhu cầu cho những người như vậy, nguồn cung cũng sẽ bắt đầu. Đây là từ quan điểm của một nhân viên-sử dụng lao động.

Về mặt kỹ thuật, trong các tổ chức tôi đã làm việc, có các nhóm phát triển và DevOps riêng biệt, mặc dù họ làm việc rất chặt chẽ cho việc giao hàng. Các kỹ sư và nhà phát triển DevOps chia sẻ phần lớn các bộ kỹ năng ở đây và do đó đôi khi có một cuộc đàm phán về nhiệm vụ.

Tối thiểu mà một nhà phát triển có thể làm là chia sẻ các nhị phân của mình, nhưng anh ta cần hiểu rằng các nhị phân sẽ được sử dụng để chạy bên trong một container docker và để anh ta hiểu cách hoạt động của docker. Đối với kubes, swarms, mesos, v.v., nhà phát triển thậm chí không quan tâm đến những gì đang được sử dụng, nhưng những điều cơ bản của docker nên được nhà phát triển hiểu rất rõ và ngay từ đầu nên xây dựng ứng dụng một cách lỏng lẻo để sử dụng lại như dịch vụ vi mô. Nếu ứng dụng được xây dựng từ tư duy đó (đòi hỏi những điều cơ bản về docker), thì các kỹ sư của DevOps có thể đưa nó lên từ đó để tự động chia tỷ lệ, sắp xếp, kiểm tra, triển khai và giám sát.

Ngoài ra, hầu hết thời gian không có một kích thước phù hợp với tất cả các loại. Một nhà phát triển không biết rõ ràng cách xây dựng một ứng dụng thân thiện với docker và một kỹ sư DevOps hoàn toàn không biết các phần bên trong của quá trình xây dựng ứng dụng. Do đó, hầu hết thời gian, các tổ chức thích giao cả hai nhiệm vụ này cho cùng một anh chàng để tăng tốc mọi thứ. Nếu có những thứ riêng biệt, thì cần phải có cơ chế phản hồi liên tục từ nhóm DevOps đến nhóm nhà phát triển để làm cho các ứng dụng trở nên tương lai hơn và docker / cloud / scale sẵn sàng.


5

Đây không phải là về Docker hoặc bất kỳ công nghệ container hóa nào khác ngoài kia.

Các container như Docker, rkt, v.v. chỉ là cách phân phối ứng dụng của bạn theo cách tương tự như nhị phân tĩnh. Bạn đang xây dựng triển khai của mình rằng nó chứa mọi thứ nó cần bên trong và người dùng cuối không cần gì hơn ngoài thời gian chạy.

Các giải pháp này tương tự như các JAR béo trong Java, trong đó mọi thứ bạn (về lý thuyết) cần chỉ là thời gian chạy (JRE) được cài đặt sẵn và mọi thứ Chỉ hoạt động ™.


Lý do tại sao các nhà phát triển cần phải hiểu (họ không cần học cách vận hành công cụ đó, chỉ tại sao điều này là cần thiết) công cụ điều phối là vì điều này cho phép bạn có một số lợi thế so với triển khai "truyền thống".

Gia súc, không phải vật nuôi

EngineYard đã viết bài báo tốt về điều đó. Toàn bộ vấn đề đó là khi máy chủ của bạn chết, sau đó bạn nhún vai và chờ đợi như mới sẽ xuất hiện. Bạn coi chúng như gia súc, bạn có hàng chục, hàng trăm, hàng ngàn con đang chạy và khi một con đi xuống, cả bạn và khách hàng của bạn đều không nên biết điều đó.

Các công cụ phối hợp đạt được điều đó bằng cách theo dõi trạng thái của tất cả các ứng dụng (nhóm / công việc, bất cứ thứ gì) trong cụm và khi thấy một trong các máy chủ ngừng phản hồi (đi xuống) thì nó sẽ tự động di chuyển tất cả các ứng dụng đang chạy trên máy chủ đó sang một nơi khác.

Sử dụng tài nguyên tốt hơn

Nhờ điều phối, bạn có thể chạy nhiều ứng dụng trên một máy chủ và người điều phối sẽ theo dõi tài nguyên cho bạn. Nó sẽ sắp xếp lại các ứng dụng khi có yêu cầu.

Cơ sở hạ tầng bất biến

Nhờ xử lý chuyển đổi dự phòng tự động trong dàn nhạc, bạn có thể chạy các hình ảnh tùy chỉnh của mình trong đám mây. Khi bạn cần cập nhật, bạn chỉ cần xây dựng hình ảnh mới, đặt Cấu hình khởi chạy để sử dụng hình ảnh đó ngay bây giờ và chỉ cần cuộn. Mọi thứ sẽ được xử lý cho bạn:

  1. Tạo máy chủ mới với cấu hình mới.
  2. Giết một máy chủ đang chạy.
  3. Dàn nhạc của bạn sẽ di chuyển mọi thứ sang các máy khác (bao gồm cả máy mới).
  4. Nếu có bất kỳ máy chủ cũ còn lại thì đi đến 1.

Hoạt động đơn giản hơn

  • Không đủ tài nguyên? Thêm máy mới vào cụm.
  • Cần nhiều trường hợp ứng dụng? Tăng số lượng và tiếp tục.
  • Giám sát? Làm xong.
  • Quản lý nhật ký? Làm xong.
  • Bí mật? Đoán xem.

TL; DR Toàn bộ điểm không phải là về Docker mà là về sự phối hợp. Docker chỉ là một phiên bản mở rộng của JAR tarball / fat cần thiết cho việc phối hợp thích hợp.


Bây giờ đó là những gì tôi đang hỏi và đó là những gì toàn bộ câu hỏi là về. Các nhà phát triển có nên quan tâm đến việc sử dụng tài nguyên tốt hơn, cơ sở hạ tầng bất biến và các hoạt động Đơn giản hơn không? ... Điều tôi tin là họ nên tập trung vào việc cung cấp các yêu cầu kinh doanh và tối ưu hóa mã sẽ dẫn đến việc sử dụng tài nguyên tốt hơn. Ngay cả docker sẽ không giúp sử dụng tốt hơn nếu đó là mã được viết xấu / trung bình. Hãy chấp nhận thực tế rằng các yêu cầu kinh doanh làm cho các nhà phát triển cung cấp mọi thứ nhanh hơn. Và bằng cách này, họ không có thời gian để tối ưu hóa mã. Tại sao thêm trách nhiệm của docker đối với họ?
Abhay Pai

Vấn đề là có một cái nhìn tổng quan về toàn bộ ngăn xếp, từ các thử nghiệm cho đến khi thực hiện và cuối cùng đến triển khai sẽ cho phép bạn xem phần mềm của bạn được sử dụng như thế nào, các trường hợp cạnh là gì, sự cố là gì. Nó sẽ làm chậm bạn trong LỘC bạn viết, nhưng cải thiện đáng kể chất lượng của họ. Trong thời gian dài tiết kiệm
Moritz

4

Dưới đây là ví dụ một số đối số từ một bài đăng trên blog được xuất bản vào năm 2014 và có tiêu đề hoàn toàn phù hợp với câu trả lời của bạn:

  • Linh hoạt hơn nhiều công nghệ mới vào môi trường
  • vẫn còn một điểm đau lớn giữa việc cam kết mã được thử nghiệm cuối cùng và sau đó để nó chạy trên các máy chủ sản xuất cuối cùng. Docker đơn giản hóa rất nhiều bước cuối cùng này
  • Docker làm cho nó trở nên tầm thường để giữ hệ điều hành cũ, bất kể bạn đang chạy Linux ở vị trí nào

Từ: https://thenewstack.io/why-you-should-care-about-docker/


Tôi đồng ý tiêm công nghệ mới. Nhưng có một số vấn đề với nó quá. Giống như sử dụng docker cho cơ sở dữ liệu ( percona.com/blog/2016/11/16/is-docker-for-your-database ). Hiện tại họ không ổn định và có thể sẽ ổn định trong tương lai. Chúng ta hãy hi vọng cho điều tốt nhất. Chúng ta có thể đạt được việc đẩy mã được thử nghiệm sang sản xuất bằng cách sử dụng CI / CD. Vậy thì tại sao lại cập bến? Các nhà phát triển không quan tâm đến những gì chúng tôi đang chạy trên hệ điều hành. Tại sao họ thậm chí phải bận tâm về việc học docker ở nơi đầu tiên? Để làm cho các tín đồ cuộc sống dễ dàng hơn?
Abhay Pai

Ở nơi đầu tiên tôi chỉ nghĩ về kịch bản "MVP" sau: dev thử một số cấu hình / công cụ mới cho môi trường như là thành phần cơ sở hạ tầng, giả sử hình ảnh. Không có Docker, thông tin này có thể bị mất hoặc bị lãng quên hoặc cần liên lạc cùng với nhiều thứ nhỏ nhặt khác. Chia sẻ Dockerfile là một thiết lập có thể chứng minh bằng máy của một thứ đang hoạt động, thậm chí được sử dụng để làm thủ công thiết lập cho cơ sở hạ tầng không có Docker có giá trị hơn là một tài liệu. Chắc chắn bạn cũng có thể đi cho Puppet; Điều tuyệt vời về Docker là IMHO cách nó cho phép các kịch bản độc lập.
Peter Muryshkin

Đã đồng ý. Nhưng vấn đề phát sinh trong quá trình phối hợp. Nhà phát triển cần phải có chuyên môn về điều phối docker để tuân thủ các thông lệ tốt nhất và cung cấp yêu cầu kinh doanh. Xem xét kịch bản của bạn nơi nhà phát triển cần tưởng tượng như một dịch vụ. Bây giờ trong khi xây dựng một dockerfile, anh ấy / cô ấy có toàn quyền kiểm soát các gói mà anh ấy / cô ấy có thể cài đặt trong hình ảnh docker. Điều gì sẽ xảy ra nếu họ cài đặt sshd để ssh vào docker thay vì sử dụng các bản ghi docker? Điều gì sẽ xảy ra nếu họ cài đặt các công cụ không liên quan gì đến logic kinh doanh nhưng lại làm tổn hại đến bảo mật? Do devs cần chuyên môn docker?
Abhay Pai

hm nhưng nếu họ thực hiện một cửa hậu dựa trên ổ cắm thì sao? Tôi nghĩ rằng
docker

Thật. Nhưng đó sẽ là một ý định độc hại của nhà phát triển trong mọi trường hợp. Có thể là docker hoặc không có docker. Nhưng khi docker được giới thiệu cho các nhà phát triển, họ có thể gây ra rủi ro chỉ vì họ thiếu kiến ​​thức phù hợp. Tại sao họ thậm chí phải bận tâm tìm hiểu docker (xem xét người điều phối cũng sẽ thêm vào sự phức tạp) khi nó có thể gây ra rủi ro và biến chứng? Xin đừng bận tâm đến câu hỏi của tôi. Ngay cả tôi cũng thích docker. Nhưng tôi đang cố gắng để hiểu quan điểm của một nhà phát triển. Bản thân tôi đã là một nhà phát triển trong 3 năm qua và bây giờ tôi là một kỹ sư của DevOps.
Abhay Pai

4

Nếu bạn đang chạy sản xuất của mình trong bộ chứa docker, điều quan trọng là những bộ chứa đó đang được tạo ra bởi cùng các nhà phát triển đã xây dựng ứng dụng chạy trên chúng. Ai khác là nơi tốt hơn để biết những gì phụ thuộc bên ngoài là cần thiết và như vậy ...?

Ngoài ra, đường ống có thể thất bại ở bất kỳ bước nào trong CD, đặc biệt khi đó là bước xây dựng hình ảnh docker, đôi khi đó là một tệp bị thiếu hoặc một lib cần thiết.

Trong công việc, chúng tôi đã giới thiệu tất cả các nhà phát triển cho docker giải thích cho họ những điều cơ bản để xây dựng dockerfile để phục vụ ứng dụng của họ, chúng tôi cũng làm cho đường ống dễ dàng để người ta chỉ có thể thêm tên và dockerfile và ứng dụng của nó sẽ tự động được xây dựng trên đẩy tiếp theo bất kể công nghệ chạy nó.

Docker quickstart thực sự là một lời giới thiệu tuyệt vời để làm như vậy, sau những gì nhóm devOps hướng dẫn các nhà phát triển trong sự lựa chọn phân phối của họ (rất nhiều người trong số họ không biết những điều như thế alpine).

Công việc của chúng tôi là cung cấp cho họ quyền truy cập dễ dàng vào các công cụ, họ làm phần còn lại để họ có thể khắc phục khi có sự cố. Docker thực sự là một phần của quá trình phát triển và nhóm devOps cung cấp cho họ hình ảnh docker phù hợp với nhu cầu của chúng tôi và đủ dễ dàng để chỉ mất vài phút để tạo một ứng dụng mới và triển khai nó mà không cần hỗ trợ.


Vì vậy, theo một nhà phát triển, việc sử dụng docker trong một dự án chỉ nên được đưa lên nếu dự án đòi hỏi sự phụ thuộc bên ngoài? Tôi nghĩ rằng docker đã trở thành một phần của quá trình phát triển của chúng tôi bởi vì chúng tôi đã thực thi nó trên các nhà phát triển hoặc vì chúng tôi nghĩ rằng nó tuyệt vời. Ngoài ra vấn đề phát sinh trong quá trình phối hợp. Họ có phải học dàn nhạc như swarm, kubernetes hay mesos không? Việc thực hiện tất cả các dàn nhạc là khác nhau. Điều gì xảy ra nếu sự cố dàn nhạc do thực hiện không tốt? Ai là người có thể đổ lỗi ? PS: Đừng bận tâm đến câu hỏi của tôi. Tôi chỉ chơi người ủng hộ của devli. Tôi cũng rất thích docker :)
Abhay Pai

2

Docker nhận được rất nhiều báo chí và blog đề cập đến việc các nhà phát triển quan tâm đến việc sử dụng nó. Đối với một số người, đó là sự thích thú khi chơi với một công nghệ mới hoặc hiểu cách mọi thứ hoạt động. Đối với những người khác, nó là một mong muốn để thêm từ khóa vào sơ yếu lý lịch của họ. Dù bằng cách nào, càng nhiều nhà phát triển biết về cách mọi thứ hoạt động và cách họ được triển khai thì họ sẽ càng ít ngạc nhiên hơn về sau. Từ những gì tôi đã thấy, có một số lượng đáng kể tiền lãi trong việc này vì vậy không khó để khuyến khích nó hơn nữa.


0

Chà, nếu bạn đã từng sử dụng máy ảo để thử nghiệm, bạn có thể muốn thử sử dụng container và docker thực sự là một công cụ tuyệt vời để thử nghiệm và nó đơn giản hơn nhiều để sử dụng thay vì LXC :)


Đã đồng ý. Tôi không chống lại việc sử dụng docker hoặc các công cụ điều phối khác nhau. Tôi cũng yêu họ. Những gì tôi đang cố gắng để hiểu là đơn giản. Ai sở hữu container của ứng dụng. Quỷ? Hay DevOps? Hoặc cả hai ? Nếu cả hai thì mỗi người nên đóng góp bao nhiêu? Khi mọi thứ thất bại hoặc do docker hoặc docker dàn nhạc, ai phải chịu trách nhiệm? Mã hiệu quả vs giúp các tín đồ để làm cho cuộc sống của họ dễ dàng. Câu hỏi của tôi nghiêng về vai trò của một cá nhân hơn là bản thân công nghệ.
Abhay Pai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.