Part 1 – Docker là gì và tại sao nó ngày càng trở lên phổ biến?

By | 27 December, 2018

Năm năm trước, Solomon Hykes đã giúp thành lập một doanh nghiệp, Docker , tìm cách làm cho các container dễ sử dụng. Với việc phát hành Docker 1.0 vào tháng 6 năm 2014, tiếng vang đã trở thành tiếng gầm. Và, trong những năm qua, nó ngày càng trở nên phổ biến.

Tất cả sự ồn ào đang xảy ra vì các công ty đang áp dụng Docker với tốc độ đáng kể. Vào tháng 7 năm 2014 tại OSCon , nhiều doanh nghiệp đã chuyển các ứng dụng máy chủ của họ từ máy ảo (VM) sang container.

Thật vậy, James Turnbull, sau đó là phó chủ tịch dịch vụ và hỗ trợ của Docker, đã chia tại hội nghị rằng ba trong số những khách hàng ngân hàng beta lớn nhất của họ đang chuyển nó vào production. Đó là một bước đi lớn cho bất kỳ công nghệ 1.0 nào, nhưng nó gần như chưa từng thấy trong thế giới tài chính.

Ngày nay, Docker và người cha mã nguồn mở của nó bây giờ có tên là Moby , lớn hơn bao giờ hết. Theo Docker, hơn 3,5 triệu ứng dụng đã được đặt trong các container sử dụng công nghệ Docker và hơn 37 tỷ ứng dụng được container hóa đã được tải xuống.

Container vs VM

Không chỉ Docker, người ta nghĩ rằng họ đang làm điều gì đó rất to lớn và vĩ đại. Nghiên cứu 451 cũng cho thấy công nghệ Docker đang thành công rực rỡ. Dự đoán ” thị trường container ứng dụng sẽ bùng nổ trong vòng 5 năm tới . Doanh thu hàng năm dự kiến ​​sẽ tăng gấp 4 lần, tăng từ 749 triệu đô la năm 2016 lên hơn 3,4 tỷ đô la vào năm 2021, đại diện cho tốc độ tăng trưởng kép hàng năm (CAGR) là 35% . “

Dữ liệu trong thế giới thực đang ủng hộ kết luận rằng Docker đang được áp dụng rộng rãi. DataDog , một hệ thống giám sát đám mây, phát hiện ra rằng vào tháng 3 năm 2016, ” 13,6% khách hàng của Datadog đã chấp nhận Docker . Một năm sau con số đó đã tăng lên 18,8%. Đó là mức tăng trưởng thị phần gần 40% trong 12 tháng.” RightScale đã quan sát trong báo cáo State of the Cloud của RightScale 2018 rằng việc áp dụng Docker bởi các ngành công nghiệp đã tăng lên 49 phần trăm từ 35 phần trăm trong năm 2017.

Docker, một công nghệ nguồn mở, không chỉ là con cưng của các cường quốc Linux như Red Hat và Canonical . Các công ty phần mềm độc quyền như Oracle và Microsoft cũng đã chấp nhận Docker . Ngày nay, gần như tất cả các công ty CNTT và đám mây đã áp dụng Docker.

Tại sao các công ty lại sử dụng container Docker

Vậy tại sao mọi người đều thích container và Docker? James bottomley, trước đây là CTO của Parallels về ảo hóa máy chủ và là nhà phát triển nhân Linux hàng đầu, đã giải thích các trình ảo hóa VM, như Hyper-V, KVM và Xen, tất cả đều “dựa trên phần cứng giả lập . Điều đó có nghĩa là chúng yêu cầu cao về mặt yêu cầu hệ thống.”

Container, sử dụng chia sẻ với hệ điều hành. Điều này có nghĩa là chúng hiệu quả hơn nhiều so với các trình ảo hóa về thuật ngữ tài nguyên hệ thống. Thay vì ảo hóa phần cứng, các container nằm trên một phiên bản Linux duy nhất. Điều này có nghĩa là bạn có thể “bỏ lại đằng sau những thứ rác 99,9% VM vô dụng, để lại cho bạn một viên nang nhỏ gọn gàng chứa ứng dụng của bạn”, ông bottomley nói.

Do đó, theo bottomley, với một hệ thống container được điều chỉnh hoàn hảo, bạn có thể có số lượng ứng dụng máy chủ gấp bốn đến sáu lần so với các máy ảo Xen hoặc KVM trên cùng một phần cứng.

Một lý do khác khiến các container trở nên phổ biến là chúng khá thích hợp để Tích hợp liên tục / Triển khai liên tục (CI / CD) . Đây là một phương pháp DevOps được thiết kế để khuyến khích các nhà phát triển tích hợp code của họ vào kho lưu trữ được chia sẻ và thường xuyên, sau đó triển khai code nhanh chóng và hiệu quả.

Docker cho phép các nhà phát triển dễ dàng đóng gói, vận chuyển và chạy bất kỳ ứng dụng nào dưới dạng một container nhẹ, di động, tự cung cấp, có thể chạy hầu như mọi nơi. Như bottomley đã nói, “Container cung cấp cho bạn tính di động của ứng dụng ngay lập tức.”

Các container thực hiện điều này bằng cách cho phép các nhà phát triển cô lập code vào một container. Điều này giúp dễ dàng sửa đổi và cập nhật chương trình. Nó cũng hỗ trợ cho các doanh nghiệp phá vỡ các dự án phát triển lớn giữa nhiều nhóm Agile nhỏ hơn sử dụng Jenkins , một chương trình CI / CD nguồn mở, để tự động hóa việc phân phối phần mềm mới trong các container.

Jay Lyman, chuyên gia phân tích cao cấp tại 451 nghiên cứu, nói thêm: “tổ chức doanh nghiệp đang tìm kiếm và đôi khi gặp khó khăn để làm cho các ứng dụng và khối lượng công việc di động nhiều hơn và phân phối một cách hiệu quả, tiêu chuẩn hóa, và lặp lại giống như vậy. GitHub kích thích sự hợp tác và đổi mới bằng cách làm cho mã nguồn có thể chia sẻ , Docker Hub, Repos chính thức và hỗ trợ thương mại đang giúp các doanh nghiệp trả lời thách thức này bằng cách cải thiện cách họ đóng gói, triển khai và quản lý các ứng dụng. “

Ngoài ra, Docker container dễ dàng triển khai trên cloud. Như Ben Lloyd Pearson đã viết trên Opensource.com : “Docker đã được thiết kế theo cách có thể kết hợp vào hầu hết các ứng dụng DevOps, bao gồm Puppet , Chef , Vagrant và Ansible , hoặc nó có thể được sử dụng riêng để quản lý môi trường phát triển . “

Cụ thể, đối với CI / CD Docker cho phép thiết lập môi trường phát triển cục bộ giống hệt như một máy chủ trực tiếp ; chạy nhiều môi trường phát triển từ cùng một máy chủ với phần mềm, hệ điều hành và cấu hình độc đáo; thử nghiệm dự án trên các máy chủ mới hoặc khác nhau; và cho phép bất cứ ai làm việc trên cùng một dự án với cùng các cài đặt, bất kể môi trường máy chủ cục bộ. Điều này cho phép các nhà phát triển chạy các bộ thử nghiệm, vốn rất quan trọng đối với CI / CD, để nhanh chóng xem liệu một thay đổi mới được thực hiện có hoạt động đúng không.

Bằng cách sử dụng CI / CD, theo khảo sát năm 2016 của 4.600 chuyên gia CNTT, các phòng CNTT có quy trình làm việc DevOps mạnh đã triển khai phần mềm thường xuyên hơn 200 lần so với các phòng CNTT hiệu suất thấp. Hơn nữa, họ đã phục hồi nhanh hơn 24 lần và có tỷ lệ thất bại thay đổi thấp hơn ba lần. Đồng thời, các doanh nghiệp này đang dành ít hơn 50% thời gian để giải quyết các vấn đề bảo mật và giảm 22% thời gian cho công việc không có kế hoạch.

Tất cả điều này không có gì ngạc nhiên khi cách phổ biến nhất để cung cấp các ứng dụng thông qua CI / CD là các thùng chứa.

Tại sao lại không thích docker? Bạn triển khai được nhiều ứng dụng hơn trên máy chủ của mình và bạn cải thiện và triển khai phần mềm của mình nhanh hơn bao giờ hết. Vậy tại sao không ai làm điều đó trước đây? Vâng, thực sự họ có. Container là một ý tưởng cũ.

Lịch sử container

Các container có từ ít nhất là năm 2000 và FreeBSD Jails. Oracle Solaris cũng có một khái niệm tương tự có tên là Zones trong khi các công ty như Parallels, Google và Docker đã làm việc trong các dự án nguồn mở như OpenVZ và LXC (Container Linux) để làm cho các container hoạt động tốt và an toàn.

Thật vậy, ít bạn biết điều đó, nhưng hầu hết các bạn đã sử dụng container trong nhiều năm. Google có công nghệ container, mã nguồn mở lmctfy của riêng mình (Hãy để tôi share thứ đó cho bạn) . Bất cứ khi nào bạn sử dụng một số chức năng của Google – Tìm kiếm, Gmail, Google Docs, bất cứ điều gì – bạn sẽ được cấp một container mới.

Tuy nhiên, docker được xây dựng trên top LXC. Giống như với bất kỳ công nghệ container nào, theo như chương trình có liên quan, nó có hệ thống tệp, lưu trữ, CPU, RAM, v.v. Sự khác biệt chính giữa các container và VM là trong khi trình ảo hóa toàn bộ thiết bị, các container chỉ ảo hóa nhân hệ điều hành.

Đến lượt mình, điều này có nghĩa là một điều mà các trình ảo hóa VM có thể làm mà các container không thể sử dụng là các hệ điều hành hoặc kernel khác nhau. Vì vậy, ví dụ, bạn có thể sử dụng Microsoft Azure để chạy cả hai phiên bản Windows Server 2012 và SUSE Linux Enterprise Server cùng một lúc. Với Docker, tất cả các container phải sử dụng cùng một hệ điều hành và kernel.

Mặt khác, nếu tất cả những gì bạn muốn làm là lấy hầu hết các phiên bản ứng dụng máy chủ chạy trên ít phần cứng nhất, bạn không cần quan tâm đến việc chạy nhiều máy ảo hệ điều hành. Nếu nhiều phiên bản của cùng một ứng dụng là những gì bạn muốn, thì bạn sẽ thích các container.

Động thái này có thể tiết kiệm cho trung tâm dữ liệu hoặc nhà cung cấp cloud hàng chục triệu đô la hàng năm về chi phí điện và phần cứng. Không có gì lạ khi họ vội vã chấp nhận Docker nhanh nhất có thể.

Tiêu chuẩn hóa container

Docker mang đến một số điều mới mà các công nghệ trước đó không có. Đầu tiên là nó làm cho các container dễ dàng hơn và an toàn hơn để triển khai và sử dụng so với các phương pháp trước đây. Ngoài ra, do Docker hợp tác với các cường quốc container khác, bao gồm Canonical, Google, Red Hat và Parallels, trên bộ điều khiển lib thành phần nguồn mở chính của nó, nó đã mang lại sự tiêu chuẩn hóa rất cần thiết cho các container.

Kể từ đó, Docker đã tặng “định dạng bộ chứa phần mềm và thời gian chạy của nó, cũng như các thông số kỹ thuật liên quan” cho Dự án Container mở của Quỹ Linux . Cụ thể, ” Docker đã lấy toàn bộ nội dung của dự án libcontainer , bao gồm nsinit và tất cả các sửa đổi cần thiết để làm cho nó chạy độc lập với Docker và tặng nó.”

Docker đã tiếp tục làm việc trên các cố gắng tiêu chuẩn hóa container khác. Ví dụ, containerd của Docker , thời gian chạy nguồn mở của containerd, hiện được lưu trữ bởi Tổ chức điện toán đám mây (CNCF) .

Vì vậy, hôm nay Docker không có bất kỳ đối thủ nào. Đúng, có những triển khai container dựa trên LXC khác như CoreOS, giờ là Red Hat’s , Rkt hoặc Canonical’s LXD , nhưng chúng không có nhiều đối thủ cạnh tranh vì chúng là các sàng lọc LXC. Điều đó nói rằng, bạn có thể chạy các container Docker trên bất kỳ hệ điều hành hoặc đám mây nào. Điều này mang lại cho nó một lợi thế hơn những người khác.

Trong cấp độ trên container, phối hợp container, Docker có một đối thủ cạnh tranh nghiêm trọng: Kubernetes .

Điều phối container

Giống như bất kỳ yếu tố nào khác trong cơ sở hạ tầng CNTT của bạn, các container cần được theo dõi và kiểm soát. Mặt khác, bạn thực sự không biết những gì đang chạy trên máy chủ của bạn.

Bạn có thể sử dụng các chương trình DevOps để triển khai và giám sát các container Docker nhưng chúng không được tối ưu hóa cho các container. Như DataDog, một công ty giám sát đám mây, đã chỉ ra trong báo cáo của mình về việc áp dụng Docker trong thế giới thực , “Tuổi thọ ngắn và mật độ tăng của container có ý nghĩa quan trọng đối với giám sát cơ sở hạ tầng. cần phải được theo dõi riêng lẻ. “

Câu trả lời là các công cụ điều phối đám mây. Monitor và quản lý container clustering và lập lịch cho container. Vào tháng 5 năm 2017, có ba chương trình phối hợp container trên đám mây lớn: Docker Swarm, Kubernetes và Mesosphere . Ngày nay, tất cả vẫn đang tồn tại, nhưng cho đến nay Kubernetes là chương trình phối hợp đám mây chiếm ưu thế nhất.

Thật vậy, vào đầu tháng 10, Mesosphere đã nhảy vào Kubernetes. Docker tuyên bố sẽ tích hợp Kubernetes vào nền tảng Docker. Người dùng có thể chọn sử dụng Kubernetes và / hoặc Docker Swarm để phối hợp.

Tại sao? Như Adrian Chifor, kỹ sư DevOps cao cấp tại công ty kiểm tra lý lịch tiếng Anh Onfido , đã viết blog vào đầu năm nay, ” Kubernetes có cộng đồng yêu thích lớn nhất và được hậu thuẫn bởi google.”

Docker biết điều này sẽ đến. Hykes cho biết tại DockerCon EU ở Copenhagen rằng công ty đã thêm Kubernetes vào các dịch vụ của mình vì nó mang lại cho “người dùng và khách hàng của chúng tôi khả năng đưa ra lựa chọn phối hợp với trải nghiệm Docker bảo mật, quản lý và đầu cuối bổ sung mà họ đã đến mong đợi từ Docker ngay từ khi bắt đầu. “

Tuy nhiên, trong khi Kubernetes có thể là người chiến thắng trong việc điều phối container, bản thân các container vẫn chủ yếu là thiết kế của Docker và chạy trên container. Công nghệ của Docker sẽ đồng hành cùng chúng tôi trong nhiều năm tới.

Kết luận về container

Tóm lại, đây là những gì Docker có thể làm cho bạn: Nó có thể nhận được nhiều ứng dụng chạy trên cùng một phần cứng hơn các công nghệ khác; nó giúp các nhà phát triển dễ dàng nhanh chóng tạo các ứng dụng chứa sẵn sàng để chạy; và nó làm cho việc quản lý và triển khai các ứng dụng dễ dàng hơn nhiều. Đặt tất cả lại với nhau và tôi có thể thấy tại sao Docker cưỡi chu kỳ cường điệu nhanh như tôi có thể nhớ lại khi nhìn thấy một công nghệ doanh nghiệp đi.

Hơn nữa, vì một khi thực tế đang sống theo sự phát triển của công. Thành thật mà nói, tôi không thể nghĩ về một công ty duy nhất ở bất kỳ quy mô nào mà ít nhất là không muốn chuyển các ứng dụng máy chủ của họ sang các container nói chung và Docker nói riêng.