Docker Soạn để chứa ứng dụng MEAN Stack



Docker Compose là một công cụ để xác định và chạy nhiều vùng chứa để chạy các ứng dụng phức tạp trong Docker, ví dụ như chứa một ứng dụng MEAN.

Trong các blog trước về Docker, bạn đã đọc về Docker image, Docker container là gì và nhu cầu của chúng là gì. Nếu bạn chưa đọc về chúng, thì tôi yêu cầu bạn đọc , trước khi tiếp tục với blog này trên Docker Compose.

Sau khi khám phá các khả năng đi kèm với Docker, chắc chắn sẽ rất thú vị khi tìm hiểu thêm. Phải không? Ít nhất thì tôi đã như vậy khi tôi vấp phải một thử thách.





Giới thiệu về Docker Compose

Tôi dễ dàng chứa một ứng dụng dịch vụ duy nhất. Nhưng khi tôi phải chứa nhiều dịch vụ trong các container riêng biệt, tôi đã gặp phải rào cản. Yêu cầu của tôi là chứa và lưu trữ một ứng dụng ngăn xếp MEAN.

Yup, bạn đọc nó đúng. Một ứng dụng ngăn xếp đầy đủ. Ban đầu, tôi nghĩ rằng điều đó là không thể. Nhưng sau khi tôi nghe nói về Docker Compose, tôi biết rằng mọi vấn đề của tôi sẽ được giải quyết.



Docker Compose có thể được sử dụng để tạo các vùng chứa riêng biệt (và lưu trữ chúng) cho từng ngăn xếp trong ứng dụng ngăn xếp MEAN. MEAN là từ viết tắt của MongoDB Express Angular & NodeJs. Bản demo tôi sẽ hiển thị trong blog này cũng thuộc chủ đề tương tự.

Bằng cách sử dụng Docker Compose, chúng tôi có thể lưu trữ từng công nghệ này trong các vùng chứa riêng biệt trên cùng một máy chủ và giúp chúng giao tiếp với nhau. Mỗi vùng chứa sẽ hiển thị một cổng để giao tiếp với các vùng chứa khác.

Giao tiếp và thời gian hoạt động của các vùng chứa này sẽ được Docker Compose duy trì.



Vì vậy, bạn có thể hỏi, làm thế nào để thiết lập toàn bộ cơ sở hạ tầng này? Vậy thì, để tôi giải thích chi tiết hơn cho bạn.

Dockerfile

Tương tự như cách chúng ta quay bất kỳ vùng chứa ứng dụng đơn nào bằng cách viết tệp dockerfile, chúng ta sẽ phải viết tệp tin docker riêng để xây dựng từng ứng dụng vùng chứa đơn. Ngoài ra, chúng tôi cũng sẽ phải viết Tệp Soạn Docker để thực hiện công việc thực tế. Docker Compose File sẽ thực thi các tệp dockerfiles khác nhau để tạo các vùng chứa khác nhau và cho phép chúng tương tác với nhau.

Trong trường hợp của chúng tôi, chúng tôi có một ứng dụng ngăn xếp đầy đủ bao gồm MongoDB, ExpressJS, Angular và NodeJS. MongoDB quản lý cơ sở dữ liệu phía sau, NodeJS và ExpressJS dành cho kết xuất phía máy chủ và Angular dành cho giao diện người dùng.

Ứng dụng MEAN Stack - Docker Compose - Edureka

Vì có ba thành phần, chúng ta phải quay các thùng chứa cho từng thành phần. Chúng ta phải quay các thùng chứa theo cách sau:

  1. Vùng chứa 1 - Góc
  2. Vùng chứa 2 - NodeJS và ExpressJS
  3. Vùng chứa 3 - MongoDB

Tạo vùng chứa Docker

Là bước đầu tiên để hoàn thiện ứng dụng trung bình, chúng ta hãy viết dockerfile để xây dựng từng thành phần, bắt đầu từ vùng chứa của Angular. Dockerfile này sẽ phải có bên trong thư mục dự án cùng với tệp ‘package.json’. ‘Package.json’ chứa thông tin chi tiết về phiên bản phụ thuộc nào cần được sử dụng bởi ‘NPM’ để xây dựng ứng dụng góc cạnh.

1. Dockerfile cho giao diện người dùng

TỪ nút: 6 CHẠY mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache sạch RUN npm cài đặt COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Như mọi khi, lệnh đầu tiên của chúng tôi là kéo một hình ảnh cơ sở và chúng tôi đang kéo một hình ảnh cơ sở ‘node: 6’.

Hai lệnh tiếp theo là về việc tạo một thư mục mới ‘/ usr / src / app’ bên trong Docker Container để lưu trữ các mã Angular và biến nó thành thư mục làm việc bên trong Container.

sắp xếp danh sách c ++

Sau đó, chúng tôi đang sao chép tệp ‘package.json’ từ thư mục dự án của chúng tôi vào bên trong vùng chứa.

Sau đó, chúng tôi chạy lệnh ‘npm cache clean’ để làm sạch bộ nhớ cache npm.

Sau đó, chúng tôi chạy lệnh ‘npm install’ để bắt đầu tải xuống các đĩa lò hơi cần thiết để lưu trữ ứng dụng Angular. Nó bắt đầu tải xuống các tấm lò hơi dựa trên các phiên bản của các phụ thuộc được chỉ định trong ‘package.json’.

Lần chạy lệnh ‘RUN’ tiếp theo là sao chép tất cả các mã, thư mục hiện diện từ thư mục dự án vào bên trong vùng chứa.

Lệnh trên yêu cầu vùng chứa hiển thị số cổng 4200 để giao tiếp với máy chủ phụ để gửi các yêu cầu do người dùng truy cập máy khách giao diện người dùng thực hiện qua giao diện người dùng Web.

Cuối cùng lệnh cuối cùng là, lệnh ‘RUN’ để bắt đầu ‘npm’. Điều này bắt đầu thực thi các mã để xây dựng ứng dụng Angular của chúng tôi.

Ứng dụng Angular hiện đã sẵn sàng, nhưng nó sẽ không được lưu trữ đúng cách vì phụ thuộc vào máy chủ back end và cơ sở dữ liệu. Vì vậy, chúng ta hãy đi xa hơn và viết một tệp dockerfile để chứa máy chủ back end.

2. Dockerfile cho Back End

Ngay cả dockerfile này cũng sẽ hiện diện trong một thư mục dự án. Thư mục này cũng sẽ chứa tệp ‘package.json’ để xác định các phụ thuộc của máy chủ Express và các yêu cầu khác của NodeJS. Nhưng quan trọng nhất, nó chứa mã dự án để hỗ trợ máy chủ back end.

TỪ nút: 6 CHẠY mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache sạch RUN npm cài đặt COPY. / usr / src / app EXPOSE 3000 CMD ['npm', 'start']

Như bạn có thể thấy, có rất nhiều điểm tương đồng giữa hai tệp dockerfiles. Chúng tôi sử dụng cùng một ‘node: 6’ làm lớp hình ảnh cơ sở, tạo một thư mục mới bên trong vùng chứa, đặt nó làm thư mục làm việc và chạy lệnh ‘npm install’ trong số những người khác. Nhưng sự khác biệt duy nhất là số cổng tiếp xúc cho giao tiếp. Trong trường hợp này, số cổng 3000 được xác định. Đây là nơi máy chủ sẽ được lưu trữ và sẽ tìm kiếm các yêu cầu từ máy khách.

3. Cơ sở dữ liệu

Bạn có thể tự hỏi tại sao tôi không đề cập đến ‘dockerfile For Database’ trong tiêu đề. Lý do là, chúng tôi thực sự không có nhu cầu tùy chỉnh. Chúng tôi có thể lấy ngay hình ảnh cơ sở ‘MongoDB’ để lưu trữ dữ liệu của mình và chỉ cần hiển thị số cổng mà nó có thể được truy cập.

Bây giờ câu hỏi trong đầu bạn sẽ là, tôi sẽ làm điều đó ở đâu? Chúng ta có thể làm điều đó trong Docker Compose File.

Docker Soạn tệp

Docker Compose File là một tệp YAML chứa thông tin chi tiết về các dịch vụ, mạng và khối lượng để thiết lập ứng dụng Docker.

Chạy lệnh dưới đây để tìm phiên bản Docker Engine của bạn.

sử dụng charat trong java
docker -v

Việc thực thi lệnh sẽ trả về phiên bản đang chạy trên máy chủ của bạn. Dựa trên phiên bản Docker Engine tại máy chủ của bạn, hãy tải xuống phiên bản Docker Compose thích hợp. Bạn có thể tìm phiên bản thích hợp để tải xuống, từ Tài liệu chính thức của Docker .

Vì tôi đang chạy Docker Engine phiên bản 17.05.0-ce, tôi đã sử dụng Docker Compose phiên bản 3.

Cài đặt Docker Compose

Để tải xuống Soạn thư, hãy chạy bộ lệnh dưới đây.

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- soạn sudo chmod + x / usr / local / bin / docker-comp

Lưu ý rằng số phiên bản trong lệnh sẽ thay đổi dựa trên phiên bản Docker Engine bạn đang chạy.

Dưới đây là các lệnh nằm trong Tệp Soạn Docker của tôi.

phiên bản: '3.0' # chỉ định phiên bản docker -omp # Xác định các dịch vụ / vùng chứa sẽ được chạy các dịch vụ: angle: # tên của bản dựng dịch vụ đầu tiên: angle-app # chỉ định thư mục của các cổng Dockerfile: - '4200: 4200' # chỉ định ánh xạ cổng express: # tên của bản dựng dịch vụ thứ hai: express-server # chỉ định thư mục của các cổng Dockerfile: - '3000: 3000' # liên kết ánh xạ cổng liên kết: - database # liên kết dịch vụ này với cơ sở dữ liệu dịch vụ cơ sở dữ liệu: # tên của hình ảnh dịch vụ thứ ba: mongo # chỉ định hình ảnh để xây dựng vùng chứa từ các cảng: - '27017: 27017' # chỉ định chuyển tiếp cổng

Tôi khá chắc chắn rằng các lệnh trong tệp trên không có ý nghĩa gì đối với bạn. Vì vậy, hãy giải quyết vấn đề đó.

Trong dòng mã đầu tiên, tôi đã xác định phiên bản Docker Compose mà tôi đang sử dụng. Đây là bước rất quan trọng nếu bạn muốn Soạn thư hoạt động bình thường mà không gặp bất kỳ lỗi nào. Đảm bảo tải xuống phiên bản Docker Compose theo phiên bản Docker Engine của bạn.

Sau đó, tôi đã xác định ba vùng chứa bằng cách sử dụng từ khóa ‘dịch vụ’. Các dịch vụ này đề cập đến ba thành phần của ngăn xếp, giao diện người dùng, kết thúc phía sau và cơ sở dữ liệu của tôi. Vì vậy, trong trường hợp này, tên của các vùng chứa của tôi sẽ là tên của các dịch vụ của tôi, tức là ‘angle’, ‘express’ và ‘database’.

Từ khóa ‘build’ được sử dụng để chỉ ra rằng dockerfile để quay vùng chứa đó có trong thư mục đó. Chờ đã, bạn có bối rối không?

Nó đơn giản. Đường dẫn cần được chỉ định sau 'build:'. Trong trường hợp của chúng tôi, ‘angle-app’ và ‘express-server’ là các đường dẫn đến hai thư mục có thể truy cập được từ thư mục có Tệp Soạn thư Docker. Đối với vùng chứa cơ sở dữ liệu của chúng tôi, tôi đã nói đơn giản là sử dụng cơ sở ‘image: mongo’ thay vì đường dẫn đến dockerfile.

Đối với mỗi dịch vụ này, tôi cũng đã chỉ định số cổng có thể được sử dụng để nhận / gửi yêu cầu từ các thùng chứa (dịch vụ) khác. 4200 trong trường hợp góc cạnh, 3000 trong trường hợp thể hiện và 27017 trong trường hợp mongo.

Ngoài ra, express container có một ‘liên kết:’ tới vùng chứa cơ sở dữ liệu, cho biết rằng bất kỳ dữ liệu nào nhận được ở phía máy chủ sẽ được gửi đến cơ sở dữ liệu nơi nó sẽ được lưu trữ.

Bây giờ, cuối cùng, chúng ta đã hoàn thành việc thiết lập Soạn. Để bắt đầu một Docker Compose và quay ba vùng chứa với ba dịch vụ, chúng ta chỉ cần thực hiện hai lệnh dưới đây từ thư mục có tệp Docker Compose (tệp YAML):

docker-soạn bản dựng docker-soạn lên

Lệnh ‘docker-compile build’ được sử dụng để xây dựng / xây dựng lại các dịch vụ trong khi lệnh ‘docker-compile up’ được sử dụng để tạo / khởi động các vùng chứa. Tiến lên! Hãy thử nó cho chính mình.

Dưới đây là ảnh chụp màn hình của hình ảnh Docker đang được xây dựng và sau đó được thực thi. Bạn có thể nhận thấy rằng hình ảnh Angular đang được xây dựng và sau đó được gắn thẻ với tên là ‘angle: new’.

Ngoài ra, một hình ảnh cho Express được tạo với tên và thẻ là 'express: mới nhất'.

Bây giờ hình ảnh đã được tạo, hãy thử chạy nó và do đó quay một vùng chứa trong quá trình này. Dưới đây là ảnh chụp màn hình đó.

Dưới đây là ảnh chụp màn hình có nội dung 'webpack: biên dịch thành công' có nghĩa là ba dịch vụ được Docker chứa thành công.

Bây giờ các vùng chứa đã được lưu trữ, bạn có thể thấy các dịch vụ đang hoạt động trên các cổng tương ứng của chúng. Nhập số cổng sau vào trình duyệt web của bạn để tương tác với GUI của ứng dụng MEAN.

localhost: 4200 - Ứng dụng Angular (Front-end)
localhost: 3000 - Express Server & NodeJS (Back-end / Server-side)
localhost: 27017 - MongoDB (Cơ sở dữ liệu)

Ấn tượng chưa? Chờ đã, vì Docker vẫn chưa hoàn thành! Chúng ta có thể sử dụng lệnh “docker-compan scale =’ x '”để dễ dàng tăng / giảm số lượng triển khai. Nói cách khác, chúng ta có thể tạo nhiều vùng chứa cho một dịch vụ. Dưới đây là toàn bộ lệnh để chia tỷ lệ một dịch vụ cụ thể thành vùng chứa ‘5’:

quy mô docker-soạn = 5

Mở rộng quy mô các dịch vụ một cách dễ dàng, đóng gói và chứa chúng theo cách hiệu quả về chi phí là những gì làm cho Docker trở thành một trong những công cụ triển khai tốt nhất và yêu thích của cá nhân tôi.

Nếu bạn vẫn còn nghi ngờ về khái niệm này, thì bạn có thể xem video dưới đây, nơi tôi đã giải thích khái niệm tương tự với thực hành thực tế về cách thiết lập Docker Compose.

Docker Soạn | Containerizing MEAN Stack ứng dụng | Hướng dẫn DevOps

Bây giờ bạn đã học về Docker, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo Chứng chỉ Edureka Docker này giúp người học có được kiến ​​thức chuyên môn trong việc triển khai Docker và thành thạo nó.

thiết lập nhật thực cho java

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.