‫Phần này sẽ tập trung hoàn toàn vào Docker Compose, là sự kết hợp giữa
‫công cụ dòng lệnh và tệp cấu hình. Yêu cầu đối với phần này là bạn thực sự
‫cần biết nhiều nguyên tắc cơ bản từ một vài phần cuối cùng về hình ảnh và vùng chứa.
‫Khi chúng ta trải qua khóa học này, có lẽ bạn sẽ bắt đầu nghe thấy tôi
‫ngày càng hào hứng hơn vì mọi thứ cứ tốt dần lên.
‫Đúng?
‫Khi bạn học một thành phần, bạn đang nghĩ, 'người đàn ông, gắn kết ràng buộc và khối lượng thực sự thú vị. Điều đó sẽ giúp tôi tiết kiệm
‫thời gian. Tôi có thể tưởng tượng mình sẽ sử dụng nó như thế nào. Blah blah blah blah.
‫Sau đó, tôi sẽ đến với điều tiếp theo sẽ thậm chí còn tốt hơn những gì bạn vừa học được.
‫Trong trường hợp này, nó không thể đúng hơn.
‫Docker Soạn. Vậy đo la cai gi? Và tại sao chúng ta quan tâm? Vì vậy, rất ít dịch vụ phần mềm thực sự độc lập.
‫Khi bạn nghĩ về các vùng chứa của mình, chúng là một giải pháp quy trình duy nhất và chúng tôi hiếm khi chỉ sử dụng
‫một vùng chứa duy nhất để giải quyết vấn đề hoặc cung cấp dịch vụ cho khách hàng của mình.
‫Các vùng chứa của chúng tôi thường sẽ yêu cầu các vùng chứa khác như SQL hoặc một giá trị khóa. Và các ứng dụng khác mà chúng ta sẽ cần
‫chạy trong vùng chứa, như proxy hoặc giao diện người dùng web hoặc công nhân phụ trợ, v.v.
‫Điều gì sẽ xảy ra nếu chúng tôi có một cách để kết nối tất cả các phần của giải pháp
‫của chúng tôi với nhau, nơi chúng tôi không cần phải nhớ tất cả các tùy chọn chạy docker của mình và sau đó đưa chúng vào các
‫mạng ảo kín đáo với các mối quan hệ giữa chúng và chỉ phơi bày công khai các cổng, sau đó xoay tất cả chúng lên và chia nhỏ chúng
‫bằng một lệnh.
‫Đó là Docker Compose.
‫Trước khi đi sâu vào, chúng ta cần làm rõ
‫rằng có hai phần cho Docker Compose. Phần đầu tiên là tệp YAML và nó rất đơn giản để hiểu.
‫Nó được viết bằng YAML, và nếu bạn chưa từng làm việc với YAML, thì đó là một ngôn ngữ cấu hình rất dễ dàng.
‫Nó gần như dễ dàng như một tệp INI.
‫Tôi thực sự nghĩ rằng nó dễ dàng hơn vì nó hiển thị thứ bậc.
‫Chúng tôi sẽ đi sâu vào vấn đề đó. Tệp đó là nơi bạn sẽ chỉ định tất cả các vùng
‫chứa bạn cần chạy, mạng bạn cần, bất kỳ khối lượng nào bạn có thể cần, các biến môi trường, hình ảnh và tất cả các loại tùy chọn
‫cấu hình khác.
‫Sau đó, phần thứ hai của Docker Compose là một công cụ CLI, là docker -compose, mà chúng tôi sử dụng bình
‫thường cho chỉ các nhà phát triển cục bộ và thử nghiệm, sử dụng tệp YAML mà chúng tôi đã tạo để đơn giản hóa các lệnh Docker của chúng tôi.
‫Hãy nói về tệp Docker Compose đó.
‫Thực sự có các phiên bản cho những thứ mà bạn có thể đưa vào tệp soạn thảo. Vì vậy, khi Docker Compose được tạo ra cách đây nhiều năm, nó thực sự được
‫gọi là "Fig" và nó chỉ được giả định là phiên bản 1. Nó thậm chí không thực
‫sự liệt kê một phiên bản trong tệp. Khi nó trưởng thành và được thêm các tính năng mới
‫vào những gì tệp có thể có trong đó, chẳng hạn như mạng và ổ đĩa, họ đã tạo ra tuyên bố phiên bản,
‫đây thực sự là dòng đầu tiên trong tệp. Tệp này thực sự có thể được sử dụng với Docker Compose CLI, mà chúng ta sẽ nói trong
‫một phút nữa.
‫Điều này, một lần nữa, chủ yếu dành cho quản lý phát triển cục bộ và chỉ giúp bạn di chuyển dễ dàng hơn trong
‫các môi trường trên máy cục bộ của bạn.
‫Bây giờ, bắt đầu từ đầu năm 2017, chúng tôi đã có phiên bản 1. 13 và bất kỳ thứ gì khác, những tệp này hiện có thể được sử
‫dụng trực tiếp với dòng lệnh docker trong sản xuất với swarm. Tất nhiên, có sự trợ giúp đắc
‫lực trong dòng lệnh với --help.
‫Khi chúng ta xem xét một số ví dụ, hãy biết rằng tệp Docker Compose là tên mặc định, nhưng bạn thực
‫sự có thể sử dụng bất kỳ tên tệp nào bạn muốn, miễn đó là YAML phù hợp và bạn sử dụng -f để chỉ định tệp nào bạn
‫' đang cố gắng sử dụng.
‫Nếu tôi mở trình chỉnh sửa của mình và xem mẫu ở đây, tôi chỉ muốn hiển thị một số phác thảo về những gì được cho
‫là trông như thế này.
‫Chúng tôi có giá trị phiên bản ngay từ đầu.
‫Phiên bản mới nhất trong quý đầu tiên của năm 2017 là 3. 1.
‫Nhưng tôi luôn làm cho nó ít nhất là phiên bản 2. Nếu bạn không thêm dòng đó vào đó, dòng đó luôn được coi là phiên bản
‫1.
‫Nhưng tôi không khuyến khích điều đó vì bạn sẽ mất rất nhiều tính năng.
‫Vì vậy, tôi thường bắt đầu với phiên bản 2. Sau đó, nếu tôi cần các tính năng cụ thể của phiên bản 3 và 3. 1, Tôi kết
‫thúc việc nhập số phiên bản vào đó. Bạn sẽ thấy ba phần chính khác là dịch
‫vụ, khối lượng và mạng, phải không?
‫Vì vậy, đây là thứ bậc.
‫Theo các dịch vụ, mọi thứ có thể là hai hoặc bốn không gian, nhưng nó cần phải nhất quán.
‫Nếu bạn chỉ tra cứu YAML trên internet, bạn sẽ tìm thấy một số trang web hướng dẫn bạn các chi tiết cụ thể
‫về cách định dạng tệp này.
‫Nếu bạn đang sử dụng một trình chỉnh sửa hiện đại, nó sẽ thực sự nói ngôn ngữ YAML và biết cách xử lý các
‫tệp này và định dạng của chúng.
‫Thông thường, ở đây, bạn có, ở mức tối thiểu, các dịch vụ, thực sự chỉ là các thùng chứa.
‫Lý do họ thực sự gọi chúng là dịch vụ là vì mỗi vùng chứa mà bạn tạo ở đây, bạn thực sự có thể có
‫nhiều vùng chứa trong số các vùng chứa đó để dự phòng. Vì vậy, họ cần phải nghĩ ra một
‫từ khác.
‫Tôi nghĩ rằng các dịch vụ là tuyệt vời vì về cơ bản đó là những gì bạn đang làm. Đúng?
‫Mỗi vùng chứa hoặc các vùng chứa giống hệt nhau, mà bạn đang sử dụng thường cung cấp dịch vụ cho một thứ
‫gì đó.
‫Bên dưới tên dịch vụ, và một lần nữa bạn có thể gọi nó bất cứ thứ gì bạn muốn.
‫Nó không nhất thiết phải là tên của hình ảnh hoặc nó không phải là bất cứ thứ gì liên quan.
‫Nó có thể là Barney cho tên dịch vụ, nhưng nó sẽ là tên DNS, mà chúng ta sẽ tìm hiểu sau, được sử
‫dụng bên trong các mạng Docker của bạn.
‫Tương tự như khi bạn cung cấp --name cho một lệnh chạy docker.
‫Ở đây, tôi đã chỉ ra rằng chúng ta có thể tùy chọn chỉ định hình ảnh. Chúng ta có thể chỉ định
‫lệnh thay thế để chạy. Nếu chúng ta muốn ghi đè lệnh thực đã được chỉ định trong hình ảnh khi chúng ta chạy nó,
‫chúng ta có thể làm điều đó tại đây.
‫Về cơ bản, tất cả những điều chúng ta làm từ lệnh chạy docker, chúng ta có thể lưu chúng tại đây. Bởi vì đó là những gì thực sự
‫là về vấn đề này, là thực hiện tất cả công việc của việc ghi nhớ tất cả những thứ khác nhau
‫trong lệnh chạy của docker cho những thứ bạn đang chạy liên tục.
‫Nếu bạn có môi trường phát triển của riêng mình hoặc các công cụ của riêng bạn, có thể bạn không muốn
‫gõ lặp đi lặp lại những lệnh đó. Và các tập lệnh shell chỉ có thể làm được nhiều như vậy.
‫Đúng?
‫Vì vậy, tệp này thực sự sẽ thay thế một tập lệnh shell sẽ tự động hóa các lệnh chạy docker của bạn.
‫Đây là một cách tốt hơn nhiều để làm điều đó.
‫Nó dễ đọc hơn và nó được ghi chép tốt hơn.
‫Bạn sẽ nhận thấy rằng không gian ở đây được phép.
‫Bạn có thể có khoảng trống trong bình luận ở bất cứ đâu bạn muốn.
‫Nếu bạn có nhiều dịch vụ, bạn chỉ cần đảm bảo rằng chúng là tên duy nhất.
‫Sau đó, các phần khác mà chúng tôi chỉ định là khối lượng và mạng. Và một lần nữa, đây cũng là tùy chọn.
‫Về cơ bản, nó giống các quy tắc như khi bạn chạy từ dòng lệnh.
‫Nếu bạn đã từng cần sử dụng ổ đĩa do docker tạo hoặc mạng docker tạo lệnh, và một lần nữa, bạn không phải lúc
‫nào cũng phải làm như vậy.
‫Nó chỉ phụ thuộc vào tình hình của bạn.
‫Bạn cũng có thể đặt chúng ở đây.
‫Hãy nhìn vào một thế giới thực, ví dụ đơn giản.
‫Bạn còn nhớ trong phần trước, chúng tôi đã có một bài giảng trong đó chúng tôi sử dụng Jekyll rất nhanh để chỉ làm một ví dụ
‫về mount liên kết.
‫Vì vậy, đây là tệp soạn thảo sẽ trông như thế nào cho lệnh chạy docker đó và bạn sẽ thấy rằng tôi đã
‫chỉ định hình ảnh ở đây.
‫Tôi đã đặt tên nó là Jekyll.
‫Tôi đã cho nó một tập. Bạn sẽ nhận thấy thay vì sử dụng pwd, Compose thực sự hiểu dấu chấm, nghĩa
‫là đây là thư mục làm việc hiện tại mà tôi đang ở.
‫Chỉ cần sử dụng thư mục mà tôi đang chạy tệp soạn thư từ này. Sau đó, các cổng hoặc tùy chọn -p.
‫Bạn sẽ nhận thấy một số điều nhỏ về YAML, khi một thứ gì đó chỉ có một tùy chọn, chẳng
‫hạn như nếu chỉ có một hình ảnh cho mỗi dịch vụ, thì nó thường sẽ là định dạng khóa và giá trị như thế này.
‫Nếu đó là danh sách các mục, như ổ đĩa và cổng mà bạn có thể có nhiều mục, bạn sẽ nhận
‫thấy rằng tệp soạn thư thường có số nhiều. Thay vì khối lượng, đó là khối lượng. Và thay vì cổng, đó là cổng.
‫Và sau đó sẽ có một định dạng danh sách với dấu -.
‫Nếu chúng ta chuyển sang một ví dụ khác thực sự nhanh chóng.
‫Bạn sẽ thấy trong phần này, đây thực
‫sự là một thiết lập WordPress mẫu, nơi bạn có dịch vụ cơ sở dữ liệu ở đây đang chạy một vùng
‫chứa cơ sở dữ liệu.
‫Và sau đó là vùng chứa máy chủ web WordPress lên trên cùng.
‫Bạn sẽ nhận thấy một điều khác biệt nhỏ ở cái này là chúng ta đang sử dụng
‫các biến môi trường, sẽ giống như a -e ở dòng lệnh. Nhưng thay vì định dạng danh sách mà chúng
‫ta có -, đây
‫lại là một câu lệnh khóa và giá trị khác.
‫Trong định dạng này, chúng tôi không sử dụng -, chúng tôi chỉ liệt kê khóa và giá trị.
‫Nếu tôi cần thêm một cái khác, tôi sẽ chỉ làm điều đó ở đây. Tất cả những thứ này sẽ được chuyển vào
‫vùng chứa, khi nó chạy, bằng cách sử dụng dòng lệnh soạn.
‫Cuối cùng, chúng ta có một ví dụ nữa. Cái này phức tạp hơn một chút. Nó thực sự là một
‫trong những tôi đã làm việc gần đây để thiết lập một cụm máy chủ ba cơ sở dữ liệu đằng sau một máy chủ web Ghost.
‫Ghost thực chất là một hệ thống blog tương tự như WordPress. Bạn sẽ thấy rằng tôi có nhiều
‫biến môi trường cho mỗi một trong các vùng chứa này.
‫Vì vậy, tôi đã có hộp chứa Ghost của mình lên trên cùng. Sau đó, tôi thực sự có thứ này được gọi
‫là SQL Proxy, nó nằm trước máy chủ MySQL và hoạt động như một giải pháp cân bằng tải và chuyển đổi dự phòng.
‫Sau đó, tôi có mỗi trong số hai máy chủ MySQL của mình. Bạn sẽ nhận thấy một tùy chọn khác ở đây cho biết, 'phụ thuộc
‫vào,' và phụ thuộc vào là một tùy chọn khá phổ biến.
‫Về cơ bản, nó giúp Soạn giả hiểu được mối quan hệ giữa các dịch vụ này. Nó biết rằng nếu tôi cần bắt
‫đầu Ghost của mình, thì tôi cũng cần bắt đầu những cái khác.
‫Bạn có thể thấy ở đây rằng Ghost của tôi thực sự phụ thuộc vào những thứ này. Chúng ta sẽ tìm hiểu chi tiết về cách thức hoạt
‫động của điều này trong các bài giảng sau.
‫Nhưng hiện tại, điều này có lẽ còn rất nhiều điều cần giải quyết, và tất cả các lệnh khác nhau này và không có gì khác, nhưng hãy tin
‫tưởng rằng Docker có một số tài liệu thực sự tuyệt vời trên trang web của họ. Nếu bạn chỉ tìm kiếm tệp Docker Compose trên Google, có thể
‫bạn sẽ tìm thấy tệp này với một vài lần truy cập đầu tiên.
‫Nó sẽ nằm dưới tài liệu. người đóng tàu. trang web com, như thường lệ,
‫và nó sẽ là tài liệu về mọi tùy chọn khóa và giá trị nhỏ mà bạn có.
‫Bạn sẽ thấy sự phụ thuộc vào tôi vừa đề cập. Bạn sẽ thấy môi trường ở đây, nơi nó hiển thị các cách khác nhau
‫để đưa các biến môi trường vào. Điều tuyệt vời về tài liệu này là nó cung cấp cho
‫bạn rất nhiều ví dụ.
‫Cá nhân tôi ở trên trang web này hàng ngày, giống như tôi đang ở trang tùy chọn lệnh chạy của docker hoặc trang
‫tùy chọn lệnh soạn.
‫Tôi liên tục tham khảo những điều này bởi vì thực sự mà nói thì ngày nay có rất nhiều tính năng mà tôi không
‫thể nhớ hết được.
‫Vì vậy, tôi giữ chúng gần trong dấu trang của mình.
‫Bây giờ chúng ta đã có ý tưởng chung về định dạng tệp soạn thảo có thể trông như thế nào, hãy
‫chuyển sang dòng lệnh và tìm hiểu về công cụ Docker Compose CLI.