Câu trả lời:
Từ câu hỏi thường gặp về Docker :
Docker không phải là một thay thế cho lxc. "lxc" đề cập đến các khả năng của hạt nhân linux (cụ thể là các không gian tên và nhóm điều khiển) cho phép các quá trình hộp cát từ nhau và kiểm soát việc phân bổ tài nguyên của chúng.
Ngoài nền tảng các tính năng hạt nhân cấp thấp này, Docker cung cấp một công cụ cấp cao với một số chức năng mạnh mẽ:
Triển khai di động trên các máy.Docker định nghĩa một định dạng để đóng gói một ứng dụng và tất cả các phụ thuộc của nó vào một đối tượng duy nhất có thể được chuyển đến bất kỳ máy nào kích hoạt docker và được thực thi ở đó với sự đảm bảo rằng môi trường thực thi tiếp xúc với ứng dụng sẽ giống nhau. Lxc thực hiện quy trình hộp cát, đây là một điều kiện tiên quyết quan trọng để triển khai di động, nhưng chỉ điều đó là không đủ để triển khai di động. Nếu bạn đã gửi cho tôi một bản sao ứng dụng của bạn được cài đặt trong cấu hình lxc tùy chỉnh, nó gần như chắc chắn sẽ không chạy trên máy của tôi theo cách của nó, bởi vì nó được gắn với cấu hình cụ thể của máy bạn: mạng, lưu trữ, ghi nhật ký, phân phối, v.v. Docker định nghĩa một sự trừu tượng hóa cho các cài đặt dành riêng cho máy này, để cùng một thùng chứa docker chính xác có thể chạy - không thay đổi - trên nhiều máy khác nhau,
Ứng dụng trung tâm. Docker được tối ưu hóa cho việc triển khai các ứng dụng , trái ngược với máy móc. Điều này được phản ánh trong API, giao diện người dùng, triết lý thiết kế và tài liệu của nó. Ngược lại, các tập lệnh trợ giúp lxc tập trung vào các thùng chứa dưới dạng các máy nhẹ - về cơ bản là các máy chủ khởi động nhanh hơn và cần ít ram hơn. Chúng tôi nghĩ rằng có nhiều hơn để chứa hơn chỉ có vậy.
Xây dựng tự động . Docker bao gồm một công cụ để các nhà phát triển tự động lắp ráp một container từ mã nguồn của họ, với toàn quyền kiểm soát các phụ thuộc ứng dụng, công cụ xây dựng, đóng gói, v.v ... Họ có thể tự do sử dụng các gói, maven, đầu bếp, bù nhìn, muối, gói debian, rpms, nguồn tarball, hoặc bất kỳ sự kết hợp nào ở trên, bất kể cấu hình của máy .
Phiên bản. Docker bao gồm các khả năng giống như git để theo dõi các phiên bản liên tiếp của container, kiểm tra sự khác biệt giữa các phiên bản, cam kết các phiên bản mới, quay lại, v.v. Lịch sử cũng bao gồm cách một container được lắp ráp và bởi ai, do đó bạn có thể truy xuất nguồn gốc hoàn toàn từ máy chủ sản xuất tất cả các cách trở lại nhà phát triển ngược dòng. Docker cũng thực hiện tải lên và tải xuống gia tăng, tương tự như "git pull", vì vậy các phiên bản mới của một container có thể được chuyển bằng cách chỉ gửi khác biệt.
Thành phần sử dụng lại. Bất kỳ container nào cũng có thể được sử dụng như một "hình ảnh cơ sở" để tạo ra các thành phần chuyên biệt hơn. Điều này có thể được thực hiện bằng tay hoặc là một phần của bản dựng tự động. Ví dụ, bạn có thể chuẩn bị môi trường python lý tưởng và sử dụng nó làm cơ sở cho 10 ứng dụng khác nhau. Thiết lập postgresql lý tưởng của bạn có thể được sử dụng lại cho tất cả các dự án trong tương lai của bạn. Và như thế.
Chia sẻ. Docker có quyền truy cập vào một sổ đăng ký công cộng ( https://registry.hub.docker.com/ ) nơi hàng ngàn người đã tải lên các thùng chứa hữu ích: mọi thứ từ redis, couchdb, postgres đến irc bouncers đến rails server server để có hình ảnh cơ sở cho distro khác nhau. Sổ đăng ký cũng bao gồm một "thư viện tiêu chuẩn" chính thức của các container hữu ích được duy trì bởi nhóm docker. Bản thân sổ đăng ký là nguồn mở, vì vậy bất kỳ ai cũng có thể triển khai sổ đăng ký của riêng mình để lưu trữ và chuyển các thùng chứa riêng, để triển khai máy chủ nội bộ chẳng hạn.
Hệ sinh thái công cụ. Docker định nghĩa một API để tự động hóa và tùy chỉnh việc tạo và triển khai các container. Có một số lượng lớn các công cụ tích hợp với docker để mở rộng khả năng của nó. Triển khai giống như PaaS (Dokku, Deis, Flynn), dàn nhạc đa nút (maestro, salt, mesos, openstack nova), bảng điều khiển quản lý (docker-ui, openstack horiz, shipyard), quản lý cấu hình (đầu bếp, con rối), tích hợp liên tục (jenkins, strider, travis), v.v. Docker đang nhanh chóng thiết lập nó như là tiêu chuẩn cho công cụ dựa trên container.
Tôi hi vọng cái này giúp được!
Chúng ta hãy xem danh sách các tính năng kỹ thuật của Docker và kiểm tra những tính năng nào được cung cấp bởi LXC và những tính năng nào không.
1) Cách ly hệ thống tập tin : mỗi bộ chứa tiến trình chạy trong một hệ thống tập tin gốc hoàn toàn riêng biệt.
Được cung cấp với LXC đồng bằng.
2) Cách ly tài nguyên : tài nguyên hệ thống như cpu và bộ nhớ có thể được phân bổ khác nhau cho từng vùng chứa quy trình, sử dụng các nhóm.
Được cung cấp với LXC đồng bằng.
3) Cách ly mạng : mỗi vùng chứa tiến trình chạy trong không gian tên mạng riêng, với giao diện ảo và địa chỉ IP của chính nó.
Được cung cấp với LXC đồng bằng.
4) Copy-on-write : hệ thống tập tin gốc được tạo bằng cách sử dụng copy-on-write, giúp triển khai cực kỳ nhanh, rẻ bộ nhớ và rẻ đĩa.
Điều này được cung cấp bởi AUFS, một hệ thống tập tin liên kết mà Docker phụ thuộc vào. Bạn có thể tự thiết lập AUFS bằng LXC, nhưng Docker sử dụng nó làm tiêu chuẩn.
5) Ghi nhật ký : các luồng tiêu chuẩn (stdout / stderr / stdin) của mỗi bộ chứa quy trình được thu thập và ghi lại để truy xuất theo thời gian thực hoặc theo đợt.
Docker cung cấp điều này.
6) Quản lý thay đổi: các thay đổi đối với hệ thống tệp của bộ chứa có thể được cam kết thành một hình ảnh mới và được sử dụng lại để tạo thêm các thùng chứa. Không cần cấu hình khuôn mẫu hoặc thủ công.
"Cấu hình khuôn mẫu hoặc thủ công" là một tham chiếu đến LXC, nơi bạn sẽ cần tìm hiểu về cả hai điều này. Docker cho phép bạn xử lý các container theo cách bạn đã từng xử lý các máy ảo mà không cần tìm hiểu về cấu hình LXC.
7) Shell tương tác : docker có thể phân bổ giả và gắn vào đầu vào tiêu chuẩn của bất kỳ container nào, ví dụ để chạy shell tương tác vứt đi.
LXC đã cung cấp điều này.
Tôi chỉ mới bắt đầu tìm hiểu về LXC và Docker, vì vậy tôi hoan nghênh mọi sửa đổi hoặc câu trả lời tốt hơn.
unshare
công cụ cơ bản (hoặc trực tiếp là tòa nhà clone()
). Tương tự như vậy, Docker làm cho những thứ đó dễ sử dụng hơn (và mang lại nhiều tính năng hơn trên bàn, như khả năng đẩy / kéo hình ảnh). 2c của tôi.
update-index
và read-tree
, không cần dụng cụ quen thuộc như add
, commit
, và merge
. Docker cung cấp lớp "sứ" đó qua "hệ thống ống nước" của LXC, cho phép bạn làm việc với các khái niệm cấp cao hơn và ít lo lắng hơn về các chi tiết cấp thấp.
Bài đăng & câu trả lời ở trên đang nhanh chóng trở nên lỗi thời khi sự phát triển của LXD tiếp tục tăng cường LXC . Vâng, tôi biết Docker cũng không đứng yên.
LXD hiện triển khai một kho lưu trữ cho các hình ảnh chứa LXC mà người dùng có thể đẩy / kéo từ đó để đóng góp hoặc tái sử dụng.
Bây giờ REST api đến LXC của LXD cho phép tạo / quản lý / triển khai / quản lý các container LXC cục bộ và từ xa bằng cách sử dụng cú pháp lệnh rất đơn giản.
Các tính năng chính của LXD là:
Hiện tại đã có plugin NCLXD cho OpenStack, cho phép OpenStack sử dụng LXD để triển khai / quản lý các thùng chứa LXC dưới dạng VM trong OpenStack thay vì sử dụng KVM, vmware, v.v.
Tuy nhiên, NCLXD cũng cho phép một đám mây lai kết hợp giữa máy ảo CTNH và máy ảo LXC truyền thống.
Plugin nclxd OpenStack một danh sách các tính năng được hỗ trợ bao gồm:
stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support
Vào thời điểm Ubuntu 16.04 được phát hành vào tháng 4 năm 2016, sẽ có thêm các tính năng thú vị như hỗ trợ thiết bị khối, hỗ trợ di chuyển trực tiếp .
Docker sử dụng hình ảnh được xây dựng trong lớp. Điều này bổ sung rất nhiều về tính di động, chia sẻ, phiên bản và các tính năng khác. Những hình ảnh này rất dễ dàng chuyển hoặc chuyển và vì chúng ở trong các lớp, những thay đổi trong các phiên bản tiếp theo được thêm vào dưới dạng các lớp so với các lớp trước đó. Vì vậy, trong khi chuyển nhiều lần, bạn không cần phải chuyển các lớp cơ sở. Docker có các container chạy các hình ảnh này với môi trường thực thi, chúng thêm các thay đổi khi các lớp mới cung cấp kiểm soát phiên bản dễ dàng.
Ngoài ra, Docker Hub là một sổ đăng ký tốt với hàng ngàn hình ảnh công cộng, nơi bạn có thể tìm thấy hình ảnh có cài đặt hệ điều hành và các phần mềm khác. Vì vậy, bạn có thể có được một khởi đầu khá tốt cho ứng dụng của bạn.
Để giữ pithier này, điều này đã được hỏi và trả lời ở trên .
Tuy nhiên, tôi đã lùi lại và trả lời nó một chút khác nhau, chính động cơ docker bổ sung sự phối hợp như một trong những tính năng bổ sung của nó và đây là phần gây rối. Khi bạn bắt đầu chạy một ứng dụng dưới dạng kết hợp các container đang chạy 'ở đâu đó' trên nhiều công cụ chứa, nó sẽ thực sự thú vị. Mạnh mẽ, Mở rộng theo chiều ngang, trừu tượng hóa hoàn toàn từ phần cứng cơ bản, tôi có thể tiếp tục và tiếp tục ...
Docker không chỉ cung cấp cho bạn điều này, trên thực tế, tiêu chuẩn của Dàn nhạc Container thực tế là Kubernetes có rất nhiều hương vị, một Docker, mà còn cả OpenShift, SuSe, Azure, AWS ...
Sau đó, bên dưới K8S có các động cơ container thay thế; những cái thú vị là Docker và CRIO - được chế tạo gần đây, không có da, dự định là một công cụ chứa dành riêng cho Kubernetes nhưng chưa trưởng thành. Đó là sự cạnh tranh giữa những thứ mà tôi nghĩ sẽ là sự lựa chọn lâu dài thực sự cho động cơ container.