‫Bây giờ bạn đã hiểu những điều cơ bản về việc tạo một nhóm nhiều nút và tạo mạng lớp phủ và dịch vụ Docker, chúng ta sẽ
‫đề cập đến điều thực sự thú vị tiếp theo về Swarm, đó là ngăn xếp. Không phải đống bánh kếp, mà
‫là đống dịch vụ. Trong 1. 13, Docker đã thêm tính năng thực sự tuyệt vời
‫này bổ sung thêm một lớp trừu tượng khác trên đầu các ngăn xếp. Về cơ bản, đó là Soạn tệp để sản xuất Swarm. Bây giờ ngăn xếp chấp
‫nhận Soạn tệp.
‫Bên trong có cái mà chúng tôi gọi là định nghĩa khai báo, nơi chúng tôi nói rằng đây là những gì
‫tôi muốn kết quả cuối cùng là.
‫Và nhiệm vụ của bầy đàn là tìm ra tất cả những điều đó. Bây giờ nó không chỉ là dịch vụ; đó là mạng và
‫khối lượng.
‫Và một chút lén lút.
‫Nó thực sự sẽ bao gồm những bí mật, mà chúng ta sẽ nói đến trong một vài bài giảng tiếp theo.
‫Chúng tôi phải sử dụng một lệnh mới, đó là triển khai ngăn xếp docker để nhập tệp Soạn này và chạy lệnh mà chúng tôi
‫đặt trong đó.
‫Ngăn xếp quản lý tất cả những điều này.
‫Nó không cần chúng tôi đi và đầu tiên tạo mạng, hoặc trước tiên tạo khối lượng, nhưng chúng tôi hoàn toàn có thể làm điều đó.
‫Chúng ta có thể sử dụng một thứ có tên là Bên ngoài trong tệp Soạn của chúng ta để nói này, đây đã là những thứ
‫tồn tại trong bầy của tôi. Hãy tiếp tục và sử dụng chúng, đừng bận tâm đến việc tạo ra chúng.
‫Nhưng thường thì cuối cùng bạn sẽ có các ngăn xếp của mình làm tất cả cho bạn vì theo cách đó dễ dàng hơn.
‫Chúng tôi sẽ nhận được một số tính năng mới trong tệp Soạn của mình, vì vậy chúng tôi sẽ bắt đầu với
‫những tính năng trông rất giống với những gì chúng tôi đã có trước đây. Nhưng chúng tôi sẽ lấy khóa triển khai mới này trong đó,
‫hoặc từ điển, cho phép chúng tôi chỉ định những thứ cụ thể cho Swarm.
‫Chúng ta muốn có bao nhiêu bản sao?
‫Chúng ta muốn làm gì khi chuyển đổi dự phòng? Chúng tôi muốn thực hiện cập nhật liên tục như thế nào
‫và tất cả những thứ mà chúng tôi không quan tâm đến trên máy phát triển cục bộ của mình.
‫Nhưng cái giá phải trả là chúng ta chưa thể thực hiện lệnh xây dựng. Đó có thể là điều sẽ không bao giờ
‫xảy ra trong Swarm bởi vì tư duy ở đây là việc xây dựng không nên xảy ra trên bầy sản
‫xuất của bạn. Xây dựng là điều mà hệ thống CI của bạn nên làm.
‫Có thể là Jenkins hoặc cái gì đó khác như Codeship.
‫Sau khi bạn xây dựng hình ảnh của mình và đưa chúng vào kho lưu trữ của mình, ngăn xếp này thực sự sẽ là nơi
‫để kéo những hình ảnh đó xuống và triển khai chúng với các tùy chọn triển khai.
‫Tuy nhiên, tin tốt ở đó là họ thực sự hòa hợp với nhau.
‫Trên máy cục bộ của bạn, Soạn thư sẽ thực sự bỏ qua khi bạn chạy lệnh docker-Compose.
‫Nó
‫thực sự sẽ bỏ qua bất kỳ thông tin triển khai nào. Nó thực sự sẽ nói 'này, bạn đã có thông tin triển khai ở đây.
‫Tôi thực sự không thể sử dụng nó vì vậy tôi sẽ bỏ qua nó. 'Tương tự như vậy,
‫khi bạn ở trên Swarm và đang triển khai một ngăn xếp mới hoặc một bản cập nhật cho một ngăn xếp, nó thực sự sẽ
‫nói' này, bạn có các lệnh xây dựng ở đây.
‫Tôi không xây dựng nên tôi sẽ bỏ qua chúng và tiếp tục. 'Điều tốt đẹp là bạn
‫không cần phải thay đổi tệp của mình. Sau này chúng ta sẽ xem cách chúng ta thực
‫sự có thể có một tệp Soạn duy nhất thực hiện mọi thứ mà chúng ta cần nó để làm ở phía phát triển và
‫ở phía triển khai sản xuất.
‫Nó khá tuyệt.
‫Cuối cùng, bạn không thực sự cần Docker Compose CLI, tệp nhị phân. Điều đó không cần phải có
‫trong bầy của bạn. Bởi vì một lần nữa soạn thảo, lệnh thực tế, không phải là một công cụ sản xuất.
‫Nó không được thiết kế để sản xuất.
‫Nó được thiết kế để trở thành một nhà phát triển và công cụ trợ giúp sysadmin.
‫Nó thực sự tốt nhất cho công việc cục bộ trên máy của chúng tôi.
‫Bầy, về cơ bản là Docker Engine. Công cụ Docker hiện có thể chấp nhận
‫Soạn tệp bằng cách sử dụng lệnh ngăn xếp đó. Nó đọc các tệp Soạn thư mà không cần Docker Compose ở bất kỳ đâu trên máy chủ.
‫Hãy đánh giá thực sự nhanh chóng khi chúng tôi nhìn lại các dịch vụ của chúng tôi.
‫Đây là những gì dịch vụ của chúng tôi sẽ trông như thế nào.
‫Chúng tôi sẽ tạo ra một dịch vụ ...
‫giả sử đó là Nginx. Và giả sử chúng tôi đã chỉ định ba bản sao của nó.
‫Vì vậy, sau đó nó sẽ đi và tạo ba tác vụ trong bộ dàn nhạc và những tác vụ đó sẽ tìm thấy các máy
‫chủ hoặc nút nhất định, để đặt chúng và chúng sẽ tạo các vùng chứa.
‫Trong các ngăn xếp mới, chúng ta đang nói về nhiều dịch vụ, một hoặc nhiều, đúng không. Bạn có thể có hàng tá dịch
‫vụ trong đó. Trong tệp YAML duy nhất đó.
‫Chúng hoạt động giống như các dịch vụ mà chúng tôi đã có trước đây, chỉ bây giờ chúng tôi có thể thực hiện khối lượng và lớp phủ
‫mạng trong tệp Soạn đó. Và điều đó dẫn đến
‫cái mà chúng ta gọi là ngăn xếp. Một ngăn xếp kiểm soát tất cả những thứ đó.
‫Và nó thực sự sẽ đặt đúng tên của nó trên tất cả các đối tượng để bạn có thể dễ dàng biết những
‫đối tượng nào liên quan đến ngăn xếp nào. Nó thực sự cũng sẽ đưa các nhãn vào đó, mà chúng
‫ta sẽ đề cập sau, đây là siêu dữ liệu nhiều hơn để bạn có thể xác định thứ cụ thể này đến từ đâu.
‫Vì vậy, điều này thực sự tuyệt vời.
‫Bây giờ chúng ta có thể sử dụng một tệp YAML để thực sự làm tất cả những điều mà chúng ta không muốn
‫phải nhập các lệnh dịch vụ. Bởi vì các lệnh dịch vụ đã trở nên khó sử dụng và dài. Và sau đó chúng tôi kết thúc
‫việc tạo các tập lệnh Bash để chạy các lệnh đó, và sau đó nó trở nên tẻ nhạt, đúng không.
‫Vì vậy, bây giờ chúng tôi đã có Swarm khoảng tám tháng, giờ chúng tôi có được tính năng ngăn xếp này để quản lý các
‫dịch vụ đó.
‫Lưu ý rằng ngăn xếp chỉ dành cho một bầy.
‫Đúng? Nó không thể làm nhiều bầy.
‫Nó sẽ chỉ chạy trên một bầy để nó có thể kiểm soát tất cả các nút và triển khai tất cả
‫các dịch vụ, mạng và khối lượng này.
‫Tôi nên nói rằng sơ đồ này thực sự có thể có một thứ nữa, đó là những bí mật, bởi vì
‫ngăn xếp cũng có thể kiểm soát những thứ đó. Chúng ta sẽ thấy điều đó trong một bài giảng sau trong phần này. ĐƯỢC RỒI.
‫Hãy xem các ngăn xếp và cách chúng hoạt động.
‫Tôi trở lại nhóm 3 nút mà chúng tôi đã xây dựng trước đó. Tôi sẽ tối đa hóa cửa sổ trên node1 vì tôi
‫không thực sự cần hai nút còn lại.
‫Ít nhất thì tôi không cần dòng lệnh ssh của họ.
‫Chúng ta sẽ sử dụng ví dụ ứng dụng biểu quyết mà chúng ta đã làm trong các bài giảng trước cho phần này.
‫Nếu bạn còn nhớ thiết kế của chúng tôi cho điều đó, thì đó là năm dịch vụ khác nhau và tất cả chúng đều phụ
‫thuộc vào nhau.
‫Và cuối cùng nó đã cung cấp cho chúng tôi hai trang web khác nhau.
‫Bạn đã xem qua và tôi chắc chắn rằng bạn đã tạo ra danh sách dịch vụ tốt nhất với tất cả các giá trị và tùy chọn mà
‫nó cần và nó thật hoàn hảo, phải không?
‫Tôi ở đây để nói với bạn rằng bây giờ, điều đó không còn cần thiết nữa.
‫Điều thực sự quan trọng đối với chúng tôi là sử dụng chúng và không phải mọi thứ đều cần tệp ngăn xếp.
‫Nhưng bây giờ tôi có một tập tin ngăn xếp.
‫Chúng ta hãy xem qua nó thật nhanh vì bạn sẽ nhận thấy rằng nó trông
‫rất giống một tệp Soạn thư vì nó đúng như vậy. Điều quan trọng thực sự duy nhất bạn phải thay đổi vì nó phải có ít nhất phiên bản
‫3 trở lên.
‫Phiên bản mới nhất hiện tại là phiên bản 3. 1, nhưng tôi chắc rằng điều đó sẽ thay đổi khi nó tiếp
‫tục thay đổi và trưởng thành.
‫Nhưng bạn cần phiên bản 3 để sử dụng ngăn xếp.
‫Bạn sẽ nhận thấy rằng chúng tôi có redis, db của chúng tôi và phiếu bầu của chúng tôi, và tất cả những thứ
‫này có thể rất giống bạn từ công việc của chính bạn. Có lẽ bạn đã rất quen thuộc với những thứ đó và hình ảnh họ
‫cần, cổng họ cần mở và tất cả những thứ đó.
‫Nhưng trong trường hợp này, bạn sẽ thấy triển khai.
‫Triển khai ở đây là một lựa chọn mới. Bạn sẽ thấy ở đây rằng tôi đã chỉ định số lượng bản sao
‫tôi muốn, đó là số lượng bản sao của hình ảnh đó cần chạy tại một thời điểm.
‫Và điều gì sẽ xảy ra khi tôi cập nhật.
‫Vì vậy, khi tôi thực hiện cập nhật ngăn xếp thực tế, sau đó sẽ thực hiện cập nhật dịch vụ.
‫Làm thế nào để tôi muốn điều đó được triển khai?
‫Đúng?
‫Tôi có muốn tất cả giảm xuống cùng một lúc không? Tôi chỉ muốn một cái tại một thời điểm?
‫Độ trễ giữa chúng là bao nhiêu?
‫Có tất cả các loại tùy chọn ở đây.
‫Chúng tôi chỉ đang làm trầy xước bề mặt, nhưng bạn có thể thấy như tôi có chính sách khởi động lại ở đây
‫mà nếu vùng chứa bị lỗi, hãy tự động khởi động lại nó.
‫Bạn có thể xem dưới đây trong
‫cơ sở dữ liệu, tôi thực sự đã đưa ra các ràng buộc để đảm bảo rằng nó nằm trên một nút cụ thể.
‫Chúng ta chưa thực sự nói nhiều về các ràng buộc, nhưng có nhiều cách để chúng ta gắn
‫nhãn các đối tượng, đó là vùng chứa hoặc hình ảnh hoặc thực sự bất cứ thứ gì mà chúng ta có thể tạo hoặc phá hủy trong Swarm hoặc trong chính Docker.
‫Chúng tôi thực sự có thể gán nhãn cho bất kỳ nút nào trong số đó, bao gồm cả các nút và một nút là trình quản lý sẽ nhận được nhãn
‫của chính nó.
‫Điều này rất dễ dàng để chúng tôi thực hiện chỉ cần nói, này, vùng chứa này phải chạy trên một nút có
‫vai trò cụ thể này.
‫Ví dụ tuyệt vời ở đó. Khi chúng ta cuộn xuống, chúng ta có một số tùy chọn song song mà chúng ta đã thấy trước đây.
‫Tùy chọn trì hoãn này khá tuyệt. Nếu bạn có loại thời gian khởi động khi
‫bạn có các thùng chứa quay tròn. Có thể họ đã bắt đầu nhưng họ không thực sự phát trực tiếp trong khoảng thời gian có thể là 60 giây hoặc gì đó.
‫Bạn có thể thêm vào sự chậm trễ ở đó. Chúng tôi thực sự sẽ xem xét những điều đó
‫sau trong quá trình triển khai sản xuất màu xanh lam-xanh lục. Hiện tại, bạn có thể thấy đó đều là những tiêu chuẩn khá đẹp.
‫Chúng tôi thực sự có nhiều tùy chọn hơn ở đây. Bạn thực sự có thể thấy rằng tôi gán cho cái này một nhãn cụ thể.
‫Tôi có một cửa sổ và nỗ lực tối đa cho chính sách khởi động lại.
‫Vì vậy, nếu nó cố gắng khởi động lại và tiếp tục không thành công, nó sẽ không thử quá ba lần.
‫Hãy cùng kiểm tra nào.
‫Tất cả những gì tôi phải làm là triển khai ngăn xếp docker -c để soạn. Vì vậy, tôi sẽ sử dụng tệp Soạn.
‫Bây giờ tôi sẽ gọi nó là voteapp. Và chúng ta bắt đầu. Nó không thực sự tạo ra mọi thứ và quay
‫nó nhanh như vậy.
‫Tất cả những gì nó đã làm là tạo các đối tượng đó trong bộ lập lịch, sau đó sẽ trải qua
‫quá trình tạo các dịch vụ, sau đó tạo các tác vụ, rồi tạo các vùng chứa.
‫Nó cũng phải tạo các mạng như bạn sẽ thấy ở đây. Hãy nhớ rằng chúng tôi đã có giao diện người
‫dùng và phần phụ trợ để nó tạo ra những thứ đó, cũng như một mạng mặc định, mà tệp ngăn xếp cụ thể mà tôi có
‫đang sử dụng mạng mặc định.
‫Và sau đó bạn sẽ thấy tùy chọn này cho trình hiển thị, một tùy chọn mới mà chúng tôi không sử dụng trước đây.
‫Chúng tôi sẽ thấy điều đó trong một phút.
‫Vì vậy, chúng ta hãy xem xét lệnh ngăn xếp docker nhiều hơn một chút.
‫Bạn sẽ thấy rằng chúng tôi có thể triển khai. Chúng tôi đã làm điều đó rồi.
‫Sau đó,
‫chúng ta có ls, ps, rm và các dịch vụ.
‫Vì vậy, lệnh này không có nhiều tính năng cho nó.
‫Nó khá đơn giản vì tất cả các chức năng thực sự nằm trong tệp Soạn thư và thực sự nằm trong các
‫đối tượng mà nó đang tạo.
‫Vì chúng tôi đã làm tất cả những điều đó rồi, chúng tôi có thể làm những thứ như ls, điều này chỉ cho chúng tôi thấy tất cả các ngăn xếp của chúng tôi.
‫Đó là một lệnh khá cơ bản. Chúng tôi chỉ có một. Sau đó, nếu tôi làm một ps, nó thực sự cho tôi thấy ... Rất tiếc, tôi
‫phải chỉ định tên.
‫bỏ phiếu.
‫Nó được gọi là voteapp.
‫Phải hiểu đúng.
‫ĐƯỢC RỒI.
‫Hãy để tôi sao lưu điều đó để bạn có thể thấy rõ hơn một chút. Ngay đó.
‫Đây là những nhiệm vụ thực tế. Sau đó, bạn có thể xem chúng đang chạy trên nút nào.
‫Nó không thực sự là các thùng chứa. Đó thực sự là nhiệm vụ mà chúng ta đang thấy ở đây. Bởi vì nếu đó là một thùng chứa
‫thực, chúng ta sẽ thấy một cái tên dài và lớn. Bởi vì nếu bạn còn nhớ, những dịch vụ chúng tôi đã tạo trước đó, chúng
‫có những cái tên rất dài nếu
‫chúng tôi thực sự đi và làm nó docker ps. Đúng? Nếu tôi đã tạo một docker container
‫ls, hoặc một docker ps, bạn sẽ có những cái tên thực sự dài này. Và đó là bởi vì tất cả chúng đều nhận được một GUID, bởi vì mỗi
‫vùng chứa phải được đặt tên duy nhất.
‫Vì vậy, đó là cách họ đảm bảo rằng chúng luôn độc nhất và không bao giờ đụng hàng.
‫Sau đó, cái cuối cùng ở
‫đây là dịch vụ ngăn xếp docker voteapp.
‫Tôi thực sự thích cái này nhất vì nó cho tôi thấy bản sao của mình.
‫Nó giống
‫như làm một dịch vụ ls. Nó cho tôi biết tôi đã bắt đầu bao nhiêu bản sao để tôi biết liệu mình đã
‫bắt đầu có đủ số lượng thùng chứa thích hợp hay chưa. Sau đó, nếu tôi muốn đi sâu
‫hơn, thì tôi có thể làm một ps ngăn xếp docker. Chúng tôi thực sự nhận được tên nhiệm vụ ở đây và chúng tôi thấy chúng đang chạy trên những nút nào.
‫Hai điều này cùng nhau thực sự cung cấp cho bạn một bức tranh toàn cảnh về cách toàn bộ ứng dụng này đang chạy.
‫Nếu tôi muốn đi sâu vào mạng, tôi có thể tạo một mạng docker
‫giống như chúng ta thường làm.
‫Và bạn có thể thấy ba mạng lớp phủ mới này đã được tạo cho ứng dụng này. Và lưu ý rằng
‫tên ứng dụng luôn ở đầu. Ngăn xếp luôn đứng trước tên của dịch vụ.
‫Vì vậy, mỗi ngăn xếp sẽ đảm bảo rằng tên của nó ở phía trước.
‫Và sau đó chúng ta hãy đi kiểm tra nó.
‫Hãy để tôi mở trình duyệt của tôi.
‫Được rồi.
‫Chúng ta có thể thấy chúng trên cổng 5000.
‫Tôi có trang web bỏ phiếu đang chạy.
‫Tôi đi đến 5001.
‫Tôi có trang web kết quả để tôi có thể đánh nó và sau đó xem kết quả.
‫Sau đó, cái mới này mà chúng tôi có được gọi là Visualizer.
‫Đó là trên 8080. Visualizer thực sự là một công cụ khá gọn gàng cho mục đích trình diễn.
‫Điều đó thực sự được làm ... Nhân tiện, tất cả điều này được tạo ra bởi Docker, và
‫tất cả đều là một kho lưu trữ mã nguồn mở mà bạn có thể xem trong phần Tài nguyên của phần này.
‫Vì vậy, chúng tôi có các màu khác nhau cho từng dịch vụ.
‫Kết quả voteapp là màu xanh lá cây.
‫Và sau đó màu đỏ là một loại mù tạt, và bầu chọn là màu hồng. Bạn có thể thấy có hai phiếu bầu và hai
‫phiếu đỏ.
‫Thật tuyệt vời khi thể hiện những gì sẽ xảy ra khi mọi thứ di chuyển xung quanh bầy đàn.
‫Nếu tôi thực sự đã truy cập vào hồ sơ của mình và thực hiện một thay đổi.
‫Hãy chuyển đến ứng dụng bỏ phiếu và giả sử chúng tôi muốn thay đổi các bản sao thành năm.
‫Chúng tôi có thể đi và cập nhật dịch vụ. Nhưng đó là một loại AntiPattern. Nếu chúng tôi truy cập và nhập theo cách
‫thủ công, các lệnh vào dịch vụ, chẳng hạn như cập
‫nhật dịch vụ docker, điều đó có nghĩa là lần tiếp theo tôi áp dụng lại tệp YAML này, nó sẽ ghi đè những thay đổi đó.
‫Nếu bạn đã từng thực hiện hình thành đám mây trong AWS hoặc bất kỳ quản lý cấu hình nào khác, bạn biết rằng khi bạn
‫đang sử dụng tệp cấu hình như thế này để quản lý cơ sở hạ tầng của mình, bạn thực sự muốn luôn sử
‫dụng tệp này vì nó sẽ là nguồn của sự thật.
‫Vì vậy, trong sản xuất, nó có thể là một loại tệp nào đó mà bạn giữ trong Kho lưu trữ Git mà bạn có quyền
‫kiểm soát phiên bản và bạn kiểm soát các thay đổi, và bằng cách đó bạn có thể khôi phục các thay đổi.
‫Trong trường hợp này, tôi sẽ thay đổi tệp đó thật nhanh và chúng tôi sẽ chạy cùng một lệnh, triển khai ngăn
‫xếp docker.
‫Lưu ý rằng chúng tôi không có bản cập nhật. Bởi vì chúng tôi sẽ triển khai vào cùng một ngăn xếp
‫và nó sẽ nhận ra rằng nó đang tồn tại và chúng tôi sẽ cập nhật nó dựa trên những thay đổi này.
‫Để cập nhật nó, chúng tôi phải đảm bảo rằng chúng tôi sử dụng đúng tên.
‫Vì vậy, đó là voteapp. Và sau đó nhận thấy rằng nó đang cập nhật các dịch vụ, nhưng nhận ra rằng nó cần phải thay đổi chúng.
‫Sau đó, nếu chúng tôi xem qua trình hiển thị của mình, bạn có thể thấy rằng chúng tôi đã có nó.
‫Hôm nay chúng ta quá chậm, phải không.
‫Chúng tôi không thể theo kịp bầy đàn. Hiện chúng tôi đã có 5 ứng dụng bỏ phiếu này đang chạy.
‫Nếu họ mất một lúc để chạy và khởi chạy, chúng tôi thực sự sẽ thấy trạng thái của họ thay đổi ở đây khi
‫họ trực tuyến.
‫Nhưng nó là một ứng dụng web đơn giản, vì vậy nó sẽ khởi động khá nhanh.
‫Được chứ.
‫Đó là ngăn xếp.
‫Bây giờ chúng ta hãy thêm vào những bí mật cho ngăn xếp của chúng ta.