‫Được rồi.
‫Bất cứ nơi nào bạn đang chạy Docker của mình, chúng tôi thực sự có thể tạo một nhóm nút duy nhất cho các mục đích thử nghiệm
‫của riêng mình.
‫Cách tôi có thể biết liệu Swarm có đang bật hay không, tôi chỉ cần nhập thông tin về docker và bạn sẽ thấy Swarm không
‫hoạt động.
‫Vì vậy, chúng tôi biết rằng Swarm chưa được kích hoạt ở đây. Một lần nữa, theo mặc định, Docker không kích hoạt bất
‫kỳ tính năng nào của Swarm.
‫Tôi có thể chạy init swarm docker để khởi tạo. Điều đó mất khoảng một nửa giây và chúng tôi đã hoàn tất.
‫Những gì chúng tôi có bây giờ là một nhóm nút duy nhất với tất cả các tính năng và chức năng mà chúng
‫tôi có được.
‫Vì vậy, đó có lẽ là bản demo ngắn nhất của toàn bộ khóa học này.
‫Ý tôi là, chuyện gì vừa xảy ra vậy? Chúng tôi đã gõ một lệnh và phép thuật. Thực ra không phải bất kỳ phép thuật nào.
‫Đó là rất nhiều thứ rất nhanh chóng và hiệu quả trong lập trình Go của Docker, nhưng về cơ bản, ngay lập
‫tức, nó
‫thực hiện một loạt PKI và công cụ bảo mật. Nó tạo chứng chỉ gốc cho bầy đàn mà nó sẽ sử dụng để
‫thiết lập niềm tin và ký chứng chỉ cho tất cả các nút và tất cả người quản lý. Nó sẽ tạo một chứng chỉ đặc biệt cho nút người
‫quản lý đầu tiên này bởi vì nó là một người quản lý so với một nhân viên.
‫Sau đó, nó tạo ra các mã thông báo này mà chúng tôi thực sự có thể sử dụng trên các nút khác để tham gia nhóm này.
‫Sau đó, một loạt những thứ khác trong nền mà nó kích hoạt API swarm và tạo ra một thứ gọi là Cơ
‫sở dữ liệu đồng thuận Raft, mà chúng ta sẽ nói sau trong phần sản xuất của khóa học.
‫Như bạn biết đấy, Raft là một giao thức thực sự đảm bảo tính nhất quán trên nhiều nút và nó lý tưởng để sử dụng
‫trong Đám mây, nơi chúng tôi không thể đảm bảo rằng bất kỳ thứ nào sẽ có sẵn trong bất kỳ
‫thời điểm nào.
‫Nó tạo ra cơ sở dữ liệu đó trên đĩa. Nó lưu trữ cấu hình của bầy đàn và
‫người quản lý đầu tiên đó, và nó thực sự mã hóa nó.
‫Giả sử bạn đang sử dụng Phiên bản 1. 13 hoặc mới hơn. Sau đó, nó sẽ đợi bất kỳ nút nào khác trước
‫khi bắt đầu thực sự sao chép cơ sở dữ liệu sang chúng.
‫Một lần nữa, tất cả lưu lượng truy cập mà nó sẽ thực hiện khi chúng ta tạo các nút khác đều sẽ được mã hóa.
‫Một trong những thành phần quan trọng của Swarm tạo nên sự khác biệt khi nó mới ra
‫mắt là chúng ta không cần thêm hệ thống lưu trữ giá trị khóa hoặc một số kiến trúc cơ sở dữ liệu để quản lý cấu
‫hình phụ trợ của swarm của chúng ta.
‫Nếu bạn đã làm việc trong ngành trong nhiều năm hoặc nhiều thập kỷ, thường có khái niệm này về cấu hình
‫db, là hệ thống cơ sở dữ liệu riêng biệt này mà bạn thường cần tạo dự phòng sẽ lưu trữ tất cả thông tin
‫về hệ thống điều phối và tự động hóa của bạn. Swarm thực sự đã tích hợp
‫thẳng vào Docker ngay trong daemon và xử lý nó cho chúng tôi.
‫Chúng tôi không bao giờ thực sự cần phải làm bất cứ điều gì. Không có mật khẩu nào phải lo lắng. Không có dịch vụ đặc biệt nào để
‫khởi động hoặc bất cứ thứ gì tương tự.
‫Vì vậy, quay trở lại dòng lệnh.
‫Bạn sẽ nhận thấy ở đây rằng nó nói về ... nếu tôi muốn thêm một công nhân vào nhóm,
‫tôi thực sự chỉ cần cắt và dán cái này vào các máy chủ khác mà tôi sẽ thêm.
‫Sau đó, chúng tôi thực sự sẽ xây dựng một nhóm nhiều nút, nhưng hiện tại, chúng tôi sẽ giữ
‫điều này ở một nút duy nhất. Hãy xem một vài lệnh sẽ thoát khỏi nó.
‫Điều đầu tiên là chúng ta có thể làm ls nút docker. Trong trường hợp này, chúng tôi chỉ thấy một nút người quản lý mà chúng
‫tôi đã tạo.
‫Bạn sẽ nhận thấy nó được đánh dấu là người lãnh đạo và chỉ có thể có một người lãnh đạo tại một thời điểm trong số tất cả các nhà quản lý.
‫Một lần nữa, vì chúng tôi chỉ có một, nên rõ ràng đó là người dẫn đầu. Chúng tôi có thể xem trợ giúp để biết
‫những tùy chọn khác mà chúng tôi có ở đây. Thực sự, các lệnh của các nút được sử dụng để đưa máy chủ của
‫bạn vào và ra khỏi nhóm, hoặc thăng cấp chúng từ công nhân thành người quản lý hoặc giáng cấp chúng từ người quản lý trở lại thành công nhân.
‫Nếu bạn quay lại lệnh swarm của dockers một chút, chúng tôi sẽ nhận thấy rằng nó thực sự là một phạm vi rất hẹp
‫để ra lệnh.
‫Nó thực sự chỉ là khởi tạo, tham gia hoặc rời khỏi.
‫Lệnh mở khóa mới mà chúng ta có thể nói đến trong bài giảng sau.
‫Bây giờ, hãy tập trung vào lệnh dịch vụ Docker mới thú vị.
‫Một lần nữa, dịch vụ trong một bầy thay thế việc chạy Docker.
‫Tôi không biết thực tế là gì, nhưng tôi thực sự nghĩ rằng điều này tập trung vào ý
‫tưởng rằng chúng tôi không muốn phá vỡ chức năng chạy Docker hiện có, nhưng Docker run luôn được xây dựng từ đầu như một
‫giải pháp máy chủ duy nhất.
‫Toàn bộ ý tưởng là tập trung vào các vùng chứa cục bộ trên hệ thống mà nó đang nói chuyện. Trong khi đó, khi chúng ta bắt đầu
‫nói về một cụm, chúng ta không quan tâm nhiều đến các nút riêng lẻ.
‫Chúng tôi không thực sự có thể đặt tên cho chúng. Chúng tôi đối xử với chúng như gia súc, nếu bạn đã từng
‫nghe nói về sự tương tự giữa vật nuôi và gia súc khi chúng chỉ là một con số.
‫Chúng tôi không thực sự đi đến từng nút riêng lẻ và khởi động một vùng chứa riêng lẻ.
‫Chúng tôi thực sự chỉ ném các yêu cầu vào bầy đàn dưới dạng dịch vụ và sau đó nó sẽ sắp xếp cách nó cần để bố trí tất cả
‫những thứ đó ra, chúng cần phải ở trên những nút nào và chúng tôi chỉ
‫biết rằng nó đã hỗ trợ chúng tôi. Dịch vụ docker tạo là cách chúng tôi
‫cung cấp cho nó một số đơn đặt hàng mới. Hãy làm một cái gì đó thực sự đơn giản.
‫Hãy thực sự để nó bắt đầu hình ảnh Alpine. Sau đó, chúng ta sẽ có hình ảnh Alpine chỉ cần sử dụng
‫ping để đạt được 8. số 8. số 8. 8, đó thực sự là một máy chủ DNS của Google, nhưng chúng tôi thực sự chỉ muốn
‫cung cấp cho nó một cái gì đó để làm trong khi chúng tôi điều tra những gì sẽ xảy ra.
‫Sau đó, bạn sẽ thấy giống như docker chạy, nó trả lại một ID, chỉ có điều đó không phải là ID vùng chứa. Đó thực sự là ID
‫dịch vụ.
‫Bạn sẽ thấy rằng bây giờ chúng tôi có một dịch vụ được liệt kê. Cũng giống như lệnh chạy docker của chúng tôi, vì chúng tôi không
‫đặt tên cho
‫nó, nó đã đặt cho nó một cái tên ngẫu nhiên. Chúng ta có thể thấy rằng nó thực sự đã được xoay tròn.
‫Một trong một. Khi xem xét các dịch vụ, bạn sẽ luôn thấy
‫con số này với dấu / ở giữa. Điều đó đại diện cho một trong những bên trái là số lượng thực sự đang chạy.
‫Và cái bên phải là số lượng bạn đã chỉ định để nó chạy.
‫Mục tiêu của người điều khiển là làm cho những con số này khớp với nhau, bất kể điều gì xảy ra.
‫Nhưng điều này một lần nữa không thực sự cho chúng ta thấy thùng chứa thực sự.
‫Đây thực sự chỉ là hiển thị cho chúng tôi danh sách các dịch vụ của chúng tôi, vì vậy chúng tôi có thể đi sâu hơn một chút.
‫Chúng tôi thực hiện một ps dịch vụ docker, sau đó chúng tôi cung cấp cho nó tên hoặc ID của dịch vụ và điều đó sẽ thực sự hiển thị
‫cho chúng tôi các nhiệm vụ hoặc vùng chứa cho dịch vụ này. Bạn sẽ thấy rằng nó tương tự như lệnh docker container ls, nhưng nó
‫thực sự có thành phần nút này vì khi bạn đang xử lý các tình huống nhiều máy chủ, chúng ta có thể cần biết
‫máy chủ đó thực sự đang chạy trên máy chủ nào. Bạn sẽ nhận thấy rằng nó thực sự
‫đã đặt cho nó một tên của phần gia tăng trên tên dịch vụ.
‫Nếu chúng ta quay lại lệnh docker container ls, lệnh đó vẫn hoạt động.
‫Trong trường hợp này, sự phối hợp của Swarm thực sự là thêm một số thông tin vào tên và
‫hình ảnh thực tế đang chạy. Chúng tôi cũng sẽ đề cập đến một số khác biệt nhỏ đó ở phần sau.
‫Hiện tại, hãy thực sự sử dụng dịch vụ đó và mở rộng quy mô. Đối với điều đó, chúng tôi sử dụng bản cập nhật dịch vụ docker, sau
‫đó là tên dịch vụ của chúng tôi hoặc ID trong trường hợp này, tôi sẽ làm ID. Và tôi muốn thay đổi một thuộc tính về
‫dịch vụ.
‫Trong trường hợp này, tôi muốn thay đổi số lượng bản sao.
‫Vì vậy, nếu chúng ta thực hiện lại một dịch vụ docker, chúng ta sẽ thấy ba trong số ba. Nếu chúng ta thực hiện một ps dịch vụ docker, bây giờ chúng
‫ta thực sự thấy ba nhiệm vụ. Bạn sẽ nhận thấy rằng hai chỉ mới được tạo vài giây trước.
‫Nếu chúng tôi đủ nhanh và nếu chúng tôi đang triển khai một thứ gì đó đủ lớn, chúng tôi thực sự có thể chạy dịch vụ và thực sự
‫thấy nó cho chúng tôi thấy số không trong ba. Một trong ba.
‫Nó thực sự sẽ tăng lên khi mọi thứ bắt đầu. Điều xảy ra là Alpine đã có mặt trên chiếc máy này,
‫về mặt hình ảnh của nó và không mất nhiều thời gian để bắt đầu một lệnh ping.
‫Chúng tôi không thể nhanh như vậy.
‫Điều thú vị về lệnh cập nhật đó là bạn có thể hình dung sự khác biệt giữa lệnh chạy Docker mà
‫bạn có thể sử dụng trên một nhà phát triển hoặc máy chủ thử nghiệm hoặc trên máy cục bộ của bạn và mối
‫quan tâm sản xuất của việc luôn giữ một thứ gì đó có sẵn
‫càng nhiều càng tốt.
‫Đó là một trong những mục tiêu thiết kế của Swarm. Lệnh mà chúng tôi thực sự
‫chưa sử dụng là lệnh cập nhật Docker. Đó là lệnh cho các vùng chứa docker run cho phép chúng tôi cập nhật
‫các biến nhất định trên vùng chứa đang chạy của chúng tôi mà không cần phải hủy và khởi động lại nó.
‫Hầu như tất cả các tùy chọn đó đều liên quan đến việc giới hạn và kiểm soát việc sử dụng tài nguyên cho vùng chứa đó.
‫Bởi vì đó là một trong những điều điển hình mà bạn thấy khi chạy một ứng dụng dài
‫hạn là bạn cần thay đổi tài nguyên của nó có thể do cơ sở dữ liệu ngày càng lớn hơn và cần nhiều RAM hơn.
‫Hoặc có thể bạn có một quá trình mất kiểm soát đang ngốn quá nhiều CPU và bạn cần hạn chế nó.
‫Nếu chúng tôi thực hiện trợ giúp về lệnh cập nhật dịch vụ docker, bạn sẽ thấy rằng chúng tôi có nhiều tùy chọn hơn.
‫Bởi vì mục tiêu của dịch vụ Swarm là nó có thể thay thế các vùng chứa và cập nhật các thay đổi trong
‫dịch vụ mà không cần gỡ bỏ toàn bộ.
‫Nếu bạn có một dịch vụ với ba vùng chứa trong đó, về mặt kỹ thuật, bạn có thể gỡ bỏ từng vùng chứa một lần để thực hiện thay đổi và thực hiện loại cập
‫nhật liên tục, đó là mẫu màu xanh lam mà chúng ta đã đề cập. Đó là lý do tại sao chúng tôi thấy nhiều tùy
‫chọn hơn ở đây vì chúng tôi có thể thay đổi các tùy chọn này có thể yêu cầu khởi động
‫lại vùng chứa, nhưng nhóm sẽ đảm bảo một cách thông minh rằng cách chúng tôi cập nhật chúng theo một mô hình
‫đảm bảo tính khả dụng nhất quán.
‫Vì vậy, trở lại danh sách vùng chứa docker của chúng tôi thực sự nhanh chóng. Bạn sẽ nhận thấy rằng bây giờ chúng ta có ba cái
‫này, và điều gì sẽ xảy ra nếu tôi vào và, giống như một kẻ lừa đảo, đã làm một thùng chứa docker rm, và tôi đã chỉ định một trong những
‫thùng chứa này, và tôi đã buộc nó ... giả sử tôi đánh bại cái đầu tiên và chỉ lấy nó ra.
‫Được rồi.
‫Bây giờ tôi làm một dịch vụ docker ls, và bạn thấy nó hiển thị hai trong ba như thế nào?
‫Bởi vì tôi đã đi vào phía sau Swarm và tôi thực sự lấy đi một thùng chứa đang chạy, nó sẽ
‫xác định điều đó và nó sẽ tung ra một cái mới trong vòng vài giây để thay thế cái đã
‫bị hỏng.
‫Vì vậy, nếu tôi đã thực hiện một dịch vụ docker ps khi có sương giá, bạn sẽ thấy rằng nó thực sự hiển thị lịch sử của tác vụ đầu tiên ở đây trong danh sách
‫là nó có một tác vụ không thành công và nó đã bắt đầu một tác vụ mới cách đây 24 giây.
‫Đây là một trong những trách nhiệm của hệ thống điều phối vùng chứa là đảm bảo rằng các dịch vụ
‫bạn đã chỉ định luôn chạy và nếu chúng bị lỗi,
‫nó sẽ khôi phục từ lỗi đó. Cách nào khác với cách chạy của docker, phải không? docker run sẽ không bao
‫giờ tạo lại một vùng chứa.
‫Vì vậy, đó là lý do tại sao bất cứ khi nào chúng tôi thực hiện bất kỳ lệnh dịch vụ Docker nào, chúng tôi không
‫thực sự nói trực tiếp với một hành động như tạo vùng chứa.
‫Chúng tôi thực sự đang nói với một hệ thống điều phối, hãy đặt công việc này vào hàng đợi của bạn.
‫Khi bạn có thể đến được nó, vui lòng thực hiện các hành động trên bầy đàn mà tôi đã yêu cầu ở đây. Đó là một sự khác biệt
‫lớn.
‫Nó tinh tế trong dòng lệnh, nhưng đó là một sự khác biệt lớn vì nó có nghĩa là có khả năng khôi phục.
‫Có khả năng giảm thiểu thất bại và rất nhiều trí tuệ được tích hợp vào đó.
‫Trong trường hợp này, nếu tôi thực sự muốn xóa tất cả các
‫vùng chứa này, tôi phải xóa dịch vụ. Tôi phải làm dịch vụ docker rm.
‫Và sau đó là sương giá.
‫Nếu chúng tôi thực hiện một dịch vụ docker ls, chúng tôi không thấy gì cả. Nếu chúng ta thực hiện
‫một ls container docker, chúng ta sẽ thấy ba container.
‫Ồ và chúng ta bắt đầu.
‫Điều đó cho thấy ngay ở đó quá trình tự động hóa đang diễn ra trên chương trình phụ trợ.
‫Chúng tôi có thể nhanh chóng cho thấy rằng chúng tôi đã xóa dịch vụ, nhưng hệ thống điều phối đã không thực hiện
‫tất cả các quy trình dọn dẹp dịch vụ và nhiệm vụ đằng sau nó. Các khái niệm này phải khá dễ hiểu vì chúng chỉ thực
‫sự mở rộng trên các khái niệm Docker run mà chúng ta đã có trước đó trong
‫khóa học này.
‫Tiếp theo, hãy thực sự xây dựng một nhóm nhiều nút và bắt đầu mở rộng các vùng chứa của chúng ta.