Docker Compose Untuk Mengandungi Aplikasi MEAN Stack



Docker Compose adalah alat untuk menentukan dan menjalankan beberapa kontena untuk menjalankan aplikasi yang kompleks di Docker, misalnya memuatkan aplikasi MEAN.

Dalam blog sebelumnya di Docker, anda pasti pernah membaca mengenai apa itu gambar Docker, bekas Docker dan apa keperluannya. Sekiranya anda belum membaca tentangnya, maka saya meminta anda membaca , sebelum meneruskan blog ini di Docker Compose.

Setelah meneroka kemungkinan yang ada di Docker, pastinya sangat menggembirakan untuk mengetahui lebih lanjut. Bukan? Paling tidak, saya ketika menghadapi cabaran.





Pengenalan Docker Compose

Mengandungi aplikasi perkhidmatan tunggal adalah mudah bagi saya. Tetapi ketika saya terpaksa membuat banyak perkhidmatan dalam kontena yang berasingan, saya mengalami sekatan jalan raya. Keperluan saya adalah mengemas dan menghoskan aplikasi stack MEAN.

Yup, anda betul-betul membacanya. Aplikasi timbunan penuh. Pada mulanya, saya fikir tidak mungkin. Tetapi setelah saya mendengar mengenai Docker Compose, saya tahu semua masalah saya akan diselesaikan.



Docker Compose dapat digunakan untuk membuat bekas yang terpisah (dan menghoskannya) untuk setiap tumpukan dalam aplikasi tumpukan MEAN. MEAN adalah akronim untuk MongoDB Express Angular & NodeJs. Demo yang akan saya paparkan di blog ini juga mempunyai topik yang sama.

Dengan menggunakan Docker Compose, kita dapat menampung setiap teknologi ini dalam bekas yang berasingan pada host yang sama dan membuatnya dapat berkomunikasi antara satu sama lain. Setiap kontena akan memperlihatkan port untuk berkomunikasi dengan bekas lain.

Komunikasi dan masa penggunaan kontena ini akan dikendalikan oleh Docker Compose.



Oleh itu, anda mungkin bertanya, bagaimana menyiapkan keseluruhan infrastruktur ini? Kalau begitu, izinkan saya memberi penjelasan yang lebih terperinci.

Dockerfile

Sama seperti bagaimana kita memutar mana-mana wadah aplikasi tunggal dengan menulis file docker, kita harus menulis file dockerfile yang terpisah untuk membina setiap aplikasi wadah tunggal. Selain itu, kita juga perlu menulis Docker Compose File yang akan melakukan kerja sebenar. Docker Compose File akan melaksanakan file docker yang berbeza untuk membuat bekas yang berbeza dan membiarkannya berinteraksi antara satu sama lain.

Dalam kes kami, kami mempunyai aplikasi timbunan penuh yang terdiri daripada MongoDB, ExpressJS, Angular dan NodeJS. MongoDB mengurus pangkalan data hujung belakang, NodeJS dan ExpressJS adalah untuk rendering sisi pelayan, dan Angular adalah untuk front end.

transformasi dalam informatica dengan contoh

Aplikasi MEAN Stack - Docker Compose - Edureka

Oleh kerana terdapat tiga komponen, kita harus memutar bekas untuk setiap komponen. Kita mesti memutarkan bekas dengan cara berikut:

  1. Bekas 1 - Sudut
  2. Bekas 2 - NodeJS dan ExpressJS
  3. Bekas 3 - MongoDB

Membuat Kontena Docker

Sebagai langkah pertama untuk memacu aplikasi rata-rata, mari kita tuliskan file docker untuk membina setiap komponen, bermula dari wadah Angular. File docker ini mesti ada di dalam direktori projek bersama dengan fail 'package.json'. ‘Package.json’ mengandungi perincian mengenai versi kebergantungan mana yang harus digunakan oleh ‘NPM’ untuk membangun aplikasi sudut.

1. Dockerfile Untuk Bahagian Depan

DARI nod: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache bersih RUN npm pasang COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Seperti biasa, perintah pertama kami adalah menarik gambar asas, dan kami menarik gambar 'simpul: 6' asas.

Dua arahan seterusnya adalah mengenai membuat direktori baru ‘/ usr / src / app’ di dalam Docker Container untuk menyimpan kod Angular dan menjadikannya direktori kerja di dalam Container.

Kami kemudian menyalin fail 'package.json' dari direktori projek kami ke dalam bekas.

Kami kemudian menjalankan perintah ‘npm cache clean’ yang membersihkan cache npm.

Selepas itu, kami menjalankan perintah ‘npm install’ yang mula memuat turun plat dandang yang diperlukan untuk menghoskan aplikasi Angular. Ia mula memuat turun pinggan dandang berdasarkan versi kebergantungan yang ditentukan dalam 'package.json'.

Jalankan perintah ‘RUN’ seterusnya adalah menyalin semua kod, folder yang ada dari direktori projek ke dalam bekas.

Perintah di atas meminta wadah untuk mengekspos port nombor 4200 untuk berkomunikasi dengan pelayan akhir untuk mengirim permintaan yang dibuat oleh pengguna yang mengakses klien akhir melalui UI Web.

Akhirnya arahan terakhir adalah, perintah 'RUN' untuk memulakan 'npm'. Ini mula melaksanakan kod untuk membina aplikasi Angular kami.

Aplikasi Angular kini siap, tetapi tidak akan dihoskan dengan betul kerana bergantung pada pelayan belakang dan pangkalan data. Oleh itu, mari kita pergi lebih jauh dan tuliskan file docker untuk mengemas kini pelayan belakang.

2. Dockerfile Untuk Bahagian Belakang

Bahkan file docker ini akan hadir dalam direktori projek. Direktori ini juga akan mengandungi fail 'package.json' untuk menentukan kebergantungan pelayan Express dan keperluan lain dari NodeJS. Tetapi yang paling penting, ia mengandungi kod projek untuk menyokong pelayan belakang.

DARI nod: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache bersih RUN npm pasang COPY. / usr / src / app EXPOSE 3000 CMD ['npm', 'start']

Seperti yang anda lihat, terdapat banyak persamaan antara kedua file dockerfile. Kami menggunakan ‘node: 6’ yang sama dengan lapisan gambar asas, membuat direktori baru di dalam bekas, menjadikannya direktori berfungsi, dan menjalankan perintah ‘npm install’ antara lain. Tetapi satu-satunya perbezaan adalah nombor port yang terdedah untuk komunikasi. Dalam kes ini, nombor port 3000 ditentukan. Di sinilah pelayan akan dihoskan dan akan mencari permintaan dari klien.

3. Pangkalan Data

Anda mungkin tertanya-tanya mengapa saya tidak menyebut ‘dockerfile For Database’ di tajuk. Sebabnya, kita sebenarnya tidak perlu membuat penyesuaian. Kami dapat dengan segera menarik gambar asas ‘MongoDB’ untuk menyimpan data kami dan hanya mendedahkan nombor port di mana ia dapat diakses.

Sekarang soalan di fikiran anda adalah, di mana saya akan melakukannya? Kita boleh melakukannya di Docker Compose File.

Fail Karang Docker

Docker Compose File adalah fail YAML yang mengandungi perincian mengenai perkhidmatan, rangkaian dan jumlah untuk menyiapkan aplikasi Docker.

Jalankan arahan di bawah untuk mencari versi Mesin Docker anda.

pelantar -v

Melaksanakan perintah akan mengembalikan versi yang berjalan di host anda. Berdasarkan versi Docker Engine di host anda, muat turun Docker Compose versi yang sesuai. Anda boleh mencari versi yang sesuai untuk dimuat turun dari Dokumentasi rasmi Docker .

Oleh kerana saya menjalankan Docker Engine versi 17.05.0-ce, saya telah menggunakan Docker Compose versi 3.

Pasang Docker Compose

Untuk memuat turun Tulis, jalankan set arahan di bawah.

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

Perhatikan bahawa nombor versi dalam perintah akan berubah berdasarkan versi Docker Engine yang anda jalankan.

Berikut adalah arahan yang merupakan sebahagian daripada Docker Compose File saya.

versi: '3.0' # tentukan versi docker-compose # Tentukan perkhidmatan / wadah yang akan dijalankan perkhidmatan: sudut: # nama binaan perkhidmatan pertama: angular-app # tentukan direktori port Dockerfile: - '4200: 4200' # tentukan port pemetaan express: # nama build perkhidmatan kedua: express-server # tentukan direktori port Dockerfile: - '3000: 3000' # tentukan pautan pemetaan port: - pangkalan data # pautkan perkhidmatan ini ke pangkalan data perkhidmatan pangkalan data: # nama gambar perkhidmatan ketiga: mongo # tentukan gambar untuk membina kontena dari port: - '27017: 27017' # tentukan pemajuan port

Saya cukup yakin perintah dalam fail di atas tidak masuk akal bagi anda. Oleh itu, mari kita selesaikan masalah itu.

Pada baris pertama kod, saya telah menentukan versi Docker Compose yang saya gunakan. Ini adalah langkah yang sangat penting jika anda mahu Compose berfungsi dengan baik tanpa membuang kesalahan. Pastikan memuat turun versi Docker Compose mengikut versi Docker Engine anda.

Selepas itu, saya menentukan tiga bekas dengan menggunakan kata kunci 'perkhidmatan'. Perkhidmatan ini merujuk kepada tiga komponen stack saya, front end, back end dan database. Jadi dalam kes ini, nama kontena saya akan menjadi nama perkhidmatan saya, iaitu 'sudut', 'ekspres' dan 'pangkalan data'.

Kata kunci ‘build’ digunakan untuk menunjukkan bahawa dockerfile untuk memutar container itu ada dalam direktori tersebut. Tunggu, adakah anda keliru bagaimana?

Ia mudah. Laluan perlu ditentukan selepas ‘build:’. Dalam kes kami, ‘angular-app’ dan ‘express-server’ adalah jalan ke dua direktori yang dapat dicapai dari direktori di mana Docker Compose File ada. Untuk bekas pangkalan data kami, saya hanya mengatakan menggunakan 'image: mongo' asas dan bukannya jalan ke dockerfile.

Untuk setiap perkhidmatan ini, saya juga telah menentukan nombor port yang dapat digunakan untuk menerima / mengirim permintaan dari kontena lain (perkhidmatan). 4200 dalam kes sudut, 3000 dalam keadaan ekspres dan 27017 dalam hal mongo.

Selain itu, bekas ekspres mempunyai 'pautan:' ke bekas pangkalan data, yang menunjukkan bahawa data apa pun yang diterima di sisi pelayan akan dihantar ke pangkalan data di mana ia akan disimpan.

Sekarang akhirnya, kita sudah selesai membuat Compose. Untuk memulakan Docker Compose dan memutar tiga container dengan tiga perkhidmatan, kita hanya perlu melaksanakan dua perintah di bawah dari direktori di mana Docker Compose File (YAML file) hadir:

docker-compose build docker-compose

Perintah ‘docker-compose build’ digunakan untuk membina / membina semula perkhidmatan sedangkan, perintah ‘docker-compose up’ digunakan untuk membuat / memulakan container. Teruskan! Cubalah sendiri.

Berikut adalah tangkapan skrin gambar Docker yang sedang dibina dan kemudian dilaksanakan. Anda dapat melihat bahawa gambar sudut sedang dibina dan kemudian ditandai dengan nama sebagai 'sudut: terkini'.

Juga, gambar untuk Express dibina dengan nama dan tanda sebagai 'express: terbaru'.

Setelah gambar dibina, mari kita jalankan dan dengan itu memutar bekas dalam prosesnya. Berikut adalah tangkapan skrin itu.

Di bawah ini adalah tangkapan skrin yang bertuliskan 'beg web: berjaya dikompilasi' yang bermaksud bahawa ketiga-tiga perkhidmatan berjaya dikendalikan oleh Docker.

Sekarang wadah dihoskan, anda dapat melihat perkhidmatan aktif di port masing-masing. Pergi ketik nombor port berikut di penyemak imbas web anda untuk berinteraksi dengan GUI aplikasi MEAN.

localhost: 4200 - Aplikasi Sudut (Bahagian Depan)
localhost: 3000 - Pelayan Ekspres & NodeJS (Bahagian belakang / Pelayan)
localhost: 27017 - MongoDB (Pangkalan Data)

Terkesan belum? Tunggu, kerana Docker belum selesai! Kita dapat menggunakan perintah 'docker-compose scale = 'x'' untuk menaikkan / menurunkan jumlah penyebaran dengan mudah. Dengan kata lain, kita boleh membuat sebilangan besar kontena untuk perkhidmatan. Berikut adalah arahan lengkap untuk meningkatkan perkhidmatan tertentu ke kontena ‘5’:

skala komposer docker = 5

Meningkatkan perkhidmatan dengan mudah, mengemas dan mengurungnya dengan cara yang menjimatkan adalah inilah yang menjadikan Docker salah satu alat penyebaran terbaik dan kegemaran peribadi saya.

Sekiranya anda masih ragu-ragu mengenai konsep ini, maka anda boleh menonton video di bawah ini di mana saya telah menjelaskan konsep yang sama dengan praktikal mengenai cara menyiapkan Docker Compose.

Pengarang Docker | Mengandung Aplikasi MEAN Stack | Tutorial DevOps

Sekarang setelah anda mengetahui tentang Docker, periksa oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar yang berpuas hati tersebar di seluruh dunia. Kursus Latihan Persijilan Edureka Docker ini membantu pelajar memperoleh kepakaran dalam melaksanakan Docker dan menguasainya.

Ada soalan untuk kami? Sila sebutkan di bahagian komen dan kami akan menghubungi anda.