Docker-compose nodejs mongodb
Các nhà phát triển giỏi quan tâm nhiều đến hiệu quả như họ quan tâm đến việc viết mã sạch. Containerization có thể tăng thêm hiệu quả cho cả quy trình công việc và ứng dụng của bạn, và do đó đã trở thành cơn thịnh nộ của các nhà phát triển hiện đại. Và, là một nhà phát triển giỏi, bạn biết rằng việc tạo vùng chứa thủ công từ hình ảnh bằng cách sử dụng 2 hoặc thậm chí sử dụng 3 để tạo vùng chứa là điều không lý tưởng. Bạn muốn có một lệnh yêu cầu Docker xây dựng các thùng chứa cho giao diện người dùng, API, cơ sở dữ liệu và máy chủ bộ đệm như thế nào? Show Trong hướng dẫn này, bạn sẽ lấy ứng dụng cơ bản từ GitHub và hoàn thành tệp 4 trong đó. Ứng dụng này sử dụng Node, NPM và MongoDB. Đừng lo lắng về việc cài đặt tất cả những thứ đó, bạn chỉ cần cài đặt DockerCũng giống như tệp 3, tệp 4 cho Docker biết cách xây dựng những gì bạn cần cho vùng chứa của mình. Không giống như 3, nó được viết bằng thông số tệp YAML và nó làm được nhiều việc hơn là chỉ xây dựng một hình ảnhChọn phiên bản Docker Compose của bạnDòng đầu tiên của bất kỳ tệp 4 nào là cài đặt 9. Trong trường hợp này, bạn sẽ sử dụng phiên bản 3. 3, vì vậy chỉ cần nói với Docker Compose rằng________số 8_______ Bạn có thể xem tài liệu về 0 phiên bản 3 tại https. // tài liệu. người đóng tàu. com/compose/compose-file/ và bạn có thể thấy sự khác biệt giữa các phiên bảnXác định các dịch vụ Node và MongoDịch vụ là cách Docker đề cập đến từng vùng chứa bạn muốn xây dựng trong tệp docker-compose. Trong trường hợp này, bạn sẽ tạo hai dịch vụ. một cho ứng dụng NodeJS và một cho cơ sở dữ liệu MongoDB
Hãy nhớ rằng phần chú ý là cách định dạng tệp YAML nhóm thông tin, vì vậy phần chú ý rất quan trọng. Tại đây, bạn đã thụt lề các dịch vụ 1 và 2 bên dưới thẻ 3. Đây có thể được đặt tên bất cứ điều gì bạn muốn. Trong trường hợp này, 1 và 'db` là dễ tham khảo nhất. Bây giờ, bạn sẽ đặt một ít thịt vào hai dịch vụ nàyTrước tiên, hãy cho Docker biết bạn muốn xây dựng dịch vụ 1 bằng hình ảnh nào bằng cách chỉ định rằng bạn sẽ xây dựng từ hình ảnh 6. Vì vậy, bạn sẽ chỉ định nó được thụt vào dưới thẻ 1
Tất nhiên hình ảnh đó không tồn tại, vì vậy bạn sẽ cần cho Docker biết nơi tìm 3 để xây dựng nó bằng cách đặt ngữ cảnh xây dựng. Nếu bạn không làm như vậy, Docker sẽ cố gắng kéo hình ảnh từ Docker Hub và khi không thành công, lệnh 0 sẽ bị lỗi hoàn toàn
Ở đây, bạn đã chỉ định rằng bối cảnh xây dựng là thư mục hiện tại, vì vậy khi Docker không thể tìm thấy hình ảnh 6 cục bộ, nó sẽ xây dựng nó bằng cách sử dụng Dockerfile trong thư mục hiện tạiTiếp theo, bạn sẽ cho Docker biết tên vùng chứa sẽ là gì sau khi nó được xây dựng hình ảnh để tạo vùng chứa từ đó
Bây giờ, khi Docker build image, nó sẽ ngay lập tức tạo một container tên là 1 từ image đóTheo mặc định, các ứng dụng NodeJS chạy trên cổng 3000, vì vậy bạn sẽ cần ánh xạ cổng đó thành 80, vì đây là tệp "sản xuất" 0. Bạn làm điều đó bằng cách sử dụng thẻ 3 trong YAML
Tại đây, bạn đã ánh xạ cổng 80 trên hệ điều hành máy chủ tới cổng 3000 từ vùng chứa. Bằng cách đó, khi bạn đã chuyển vùng chứa này sang máy chủ sản xuất, người dùng ứng dụng có thể truy cập cổng 80 của máy chủ và yêu cầu các yêu cầu đó được trả lời từ vùng chứa trên cổng 3000 Ứng dụng của bạn sẽ lấy dữ liệu từ cơ sở dữ liệu MongoDB và để làm được điều đó, ứng dụng sẽ cần một chuỗi kết nối mà nó sẽ lấy từ một biến môi trường có tên là “MONGO_URI”. Để đặt các biến môi trường trong vùng chứa sau khi được tạo, hãy sử dụng thẻ 4 trong tệp YAML
Tạo một mạng DockerĐể dịch vụ ứng dụng thực sự có thể tiếp cận cơ sở dữ liệu mẫu, dịch vụ này cần phải nằm trên cùng một mạng. Để đặt cả hai dịch vụ này trên cùng một mạng, hãy tạo một dịch vụ trong tệp 0 bằng cách sử dụng thẻ 6 ở cấp cao nhất (cùng cấp độ chỉ định với thẻ 3
Điều này tạo ra một mạng gọi là “samplenet” sử dụng mạng kiểu cầu nối. Điều này sẽ cho phép hai vùng chứa giao tiếp qua mạng ảo giữa chúng Quay lại phần ứng dụng của tệp, tham gia dịch vụ ứng dụng vào mạng “samplenet”
Tạo dịch vụ MongoDBBây giờ dịch vụ ứng dụng đã sẵn sàng, nhưng sẽ không tốt nếu không có dịch vụ db. Vì vậy, hãy thêm những thứ tương tự trong phần tiếp theo cho dịch vụ db
Dịch vụ này được xây dựng từ MongoDB 3 chính thức. 0. 15 và tạo vùng chứa có tên “sample_db”. Nó cũng tham gia mạng “samplenet” với bí danh là “sampledb”. Đây giống như một tên DNS trên một mạng vật lý, nó cho phép các dịch vụ khác trên mạng “samplenet” gọi nó bằng bí danh của nó. Điều này rất quan trọng vì nếu không có nó, dịch vụ ứng dụng sẽ gặp khó khăn hơn nhiều khi nói chuyện với nó. (Tôi không biết rằng nó không thể, có lẽ nó sẽ phải sử dụng hàm băm đầy đủ của vùng chứa. ) Sử dụng Docker VolumesBạn cũng sẽ muốn tạo một ổ đĩa trong dịch vụ cơ sở dữ liệu. Ổ đĩa cho phép bạn gắn các thư mục trên máy chủ vào các thư mục trong vùng chứa. Có nghĩa là, khi thứ gì đó bên trong vùng chứa đề cập đến một thư mục, nó sẽ thực sự truy cập vào một thư mục trên máy chủ. Điều này đặc biệt hữu ích cho các thùng chứa cơ sở dữ liệu vì các thùng chứa có nghĩa là dùng một lần. Với việc gắn kết vào thư mục vật lý trên máy chủ, bạn sẽ có thể hủy vùng chứa và xây dựng lại nó và các tệp dữ liệu cho vùng chứa sẽ vẫn ở đó trên máy chủ. Vì vậy, hãy thêm thẻ âm lượng trong phần db gắn thư mục 8 trong vùng chứa (nơi Mongo lưu trữ dữ liệu của nó) vào thư mục 2 trong thư mục gốc của ứng dụng của bạn để phần db cuối cùng trông giống như sau 0Xem lại tệp soạn thảo Docker của bạnVới tất cả những gì đã làm, docker-compose cuối cùng của bạn. tệp yml sẽ trông giống như 1Khi tất cả đã được thực hiện, bạn sẽ có thể lưu tệp và chạy 0 trong thư mục mà bạn docker-compose. yml là và xem Docker xây dựng và bắt đầu môi trường của bạn cho bạnNếu mọi thứ hoàn tất thành công, bạn có thể truy cập 1 và xem nội dung nào đó giống như hình ảnh bên dướiXin chúc mừng. Bạn có một môi trường hoàn chỉnh được xác định trong mã nguồn của mình. Nó có thể được phiên bản và đăng ký để kiểm soát nguồn. Đây là những gì mọi người gọi là "Cơ sở hạ tầng như Code". Điều đó cũng có nghĩa là việc tạo lại môi trường này trên các môi trường thử nghiệm, dàn dựng và sản xuất cũng dễ dàng như chạy 0 trên máy tương ứng. Tôi đã nói với bạn rằng các nhà phát triển giỏi đều lười biếngTìm hiểu thêmBạn có thể tìm hiểu thêm về Docker Compose và Docker nói chung từ tài liệu tương ứng của chúng. Nếu bạn muốn tìm hiểu thêm về 3 được sử dụng trong dự án này, hãy xem phần hai của loạt bài này về 3Như mọi khi, nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào về điều này hoặc bất kỳ bài viết nào của tôi, vui lòng liên hệ với tôi trên Twitter hoặc GitHub |