Docker Compose Untuk Mengemas Aplikasi Stack MEAN



Docker Compose adalah alat untuk menentukan dan menjalankan banyak kontainer untuk menjalankan aplikasi kompleks di Docker, misalnya membuat kontainer aplikasi MEAN.

Di blog sebelumnya di Docker, Anda akan membaca tentang apa itu gambar Docker, kontainer Docker dan apa yang dibutuhkannya. Jika Anda belum membaca tentang mereka, maka saya meminta Anda untuk membaca , sebelum melanjutkan blog ini di Docker Compose.

Setelah menjelajahi berbagai kemungkinan yang menyertai Docker, tentunya sangat menarik untuk mempelajari lebih lanjut. Bukan? Setidaknya saya saat saya tersandung ke dalam sebuah tantangan.





Pengantar Docker Compose

Mengemas aplikasi layanan tunggal mudah bagi saya. Tetapi ketika saya harus memasukkan beberapa layanan dalam wadah terpisah, saya mengalami hambatan. Persyaratan saya adalah untuk membuat kontainer dan menjadi tuan rumah aplikasi tumpukan MEAN.

Yup, Anda membacanya dengan benar. Aplikasi tumpukan penuh. Awalnya, saya pikir itu tidak mungkin. Tapi setelah saya mendengar tentang Docker Compose, saya tahu semua masalah saya akan terpecahkan.



apa kendala di sql

Docker Compose dapat digunakan untuk membuat container terpisah (dan menghostingnya) untuk setiap stack di aplikasi MEAN stack. MEAN adalah singkatan dari MongoDB Express Angular & NodeJs. Demo yang akan saya tampilkan di blog ini juga dengan topik yang sama.

Dengan menggunakan Docker Compose, kita dapat menghosting masing-masing teknologi ini dalam wadah terpisah pada host yang sama dan membuatnya berkomunikasi satu sama lain. Setiap kontainer akan membuka port untuk berkomunikasi dengan kontainer lain.

Komunikasi dan waktu aktif kontainer ini akan dikelola oleh Docker Compose.



Jadi Anda mungkin bertanya, bagaimana cara mengatur seluruh infrastruktur ini? Baiklah, izinkan saya memberi Anda penjelasan yang lebih rinci.

Dockerfile

Mirip dengan bagaimana kita memutar wadah aplikasi tunggal dengan menulis file galangan, kita harus menulis file galangan terpisah untuk membangun setiap aplikasi wadah tunggal. Selain itu, kita juga harus menulis File Tulis Docker yang akan melakukan pekerjaan sebenarnya. Docker Compose File akan menjalankan file docker yang berbeda untuk membuat wadah yang berbeda dan membiarkan mereka berinteraksi satu sama lain.

Dalam kasus kami, kami memiliki aplikasi tumpukan penuh yang terdiri dari MongoDB, ExpressJS, Angular dan NodeJS. MongoDB menangani database back end, NodeJS dan ExpressJS untuk rendering sisi server, dan Angular untuk front end.

Aplikasi MEAN Stack - Docker Compose - Edureka

Karena ada tiga komponen, kami harus memutar wadah untuk masing-masing komponen. Kami harus memutar wadah dengan cara berikut:

  1. Wadah 1 - Sudut
  2. Kontainer 2 - NodeJS dan ExpressJS
  3. Penampung 3 - MongoDB

Membuat Kontainer Docker

Sebagai langkah pertama untuk melakukan docker pada aplikasi mean, mari kita tulis file dock untuk membangun setiap komponen, mulai dari container Angular. Dockerfile ini harus ada di dalam direktori proyek bersama dengan file 'package.json'. 'Package.json' berisi detail tentang versi dependensi mana yang perlu digunakan oleh 'NPM' untuk membuat aplikasi sudut.

1. Dockerfile Untuk Bagian Depan

DARI node: 6 JALANKAN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app JALANKAN cache npm bersih JALANKAN npm instal COPY. / usr / src / app TAMPILKAN 4200 CMD ['npm', 'start']

Seperti biasa, perintah pertama kita adalah menarik gambar dasar, dan kita menarik gambar dasar 'node: 6'.

Dua perintah berikutnya adalah tentang membuat direktori baru '/ usr / src / app' di dalam Container Docker untuk menyimpan kode Angular dan menjadikannya direktori kerja di dalam Container.

Kami kemudian menyalin file 'package.json' dari direktori proyek kami ke dalam penampung.

Kami kemudian menjalankan perintah 'npm cache clean' yang membersihkan cache npm.

Setelah itu, kami menjalankan perintah 'npm install' yang mulai mengunduh pelat boiler yang diperlukan untuk menghosting aplikasi Angular. Ini mulai mengunduh pelat boiler berdasarkan versi dependensi yang ditentukan dalam 'package.json'.

Perintah 'RUN' berikutnya adalah menyalin semua kode, folder yang ada dari direktori proyek ke dalam penampung.

Perintah di atas meminta wadah untuk mengekspos nomor port 4200 untuk berkomunikasi dengan server ujung belakang untuk mengirim permintaan yang dibuat oleh pengguna yang mengakses klien ujung depan melalui UI Web.

Terakhir, perintah terakhir adalah, 'RUN' untuk memulai 'npm'. Ini mulai menjalankan kode untuk membangun aplikasi Angular kami.

Aplikasi Angular sekarang siap, tetapi tidak akan dihosting dengan benar karena ketergantungannya pada server back end dan database. Jadi, mari kita melangkah lebih jauh dan menulis file dok untuk memasukkan server back end.

2. Dockerfile Untuk Back End

Dockerfile ini pun akan hadir di direktori proyek. Direktori ini juga akan berisi file 'package.json' untuk menentukan dependensi dari server Express dan persyaratan NodeJS lainnya. Tetapi yang paling penting, ini berisi kode proyek untuk mendukung server ujung belakang.

DARI node: 6 JALANKAN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app JALANKAN cache npm bersih JALANKAN npm instal COPY. / usr / src / app TAMPILKAN 3000 CMD ['npm', 'start']

Seperti yang Anda lihat, ada banyak kemiripan antara kedua file galangan tersebut. Kami menggunakan 'node: 6' yang sama dengan layer gambar dasar, membuat direktori baru di dalam container, menjadikannya direktori kerja, dan menjalankan perintah 'npm install'. Tetapi satu-satunya perbedaan adalah nomor port yang terbuka untuk komunikasi. Dalam kasus ini, nomor port 3000 ditentukan. Di sinilah server akan dihosting dan akan mencari permintaan dari klien.

3. Basis Data

Anda mungkin bertanya-tanya mengapa saya tidak menyebutkan ‘dockerfile For Database’ di tajuk. Pasalnya, sebenarnya kami tidak perlu melakukan kustomisasi. Kami dapat langsung menarik gambar dasar 'MongoDB' untuk menyimpan data kami dan hanya memperlihatkan nomor port yang dapat diaksesnya.

Sekarang pertanyaan yang ada di benak Anda adalah, di mana saya akan melakukan itu? Kita bisa melakukannya di File Compose Docker.

File Tulis Docker

File Compose Docker adalah file YAML yang berisi detail tentang layanan, jaringan, dan volume untuk menyiapkan aplikasi Docker.

Jalankan perintah di bawah ini untuk menemukan versi Mesin Docker Anda.

buruh pelabuhan -v

Menjalankan perintah akan mengembalikan versi yang berjalan di host Anda. Berdasarkan versi Docker Engine di host Anda, unduh versi yang sesuai Docker Compose. Anda dapat mencari versi yang sesuai untuk diunduh, dari Dokumentasi resmi Docker .

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

Instal Docker Compose

Untuk mengunduh Tulis, jalankan serangkaian perintah di bawah ini.

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

Perhatikan bahwa nomor versi di perintah akan berubah berdasarkan versi Mesin Docker yang Anda jalankan.

Di bawah ini adalah perintah-perintah yang merupakan bagian dari File Tulis Docker saya.

versi: '3.0' # tentukan versi docker-compose # Tentukan layanan / kontainer yang akan dijalankan layanan: angular: # nama layanan pertama build: angular-app # tentukan direktori port Dockerfile: - '4200: 4200' # tentukan port mapping express: # nama layanan kedua build: express-server # tentukan direktori port Dockerfile: - '3000: 3000' #specify port mapping links: - database # tautkan layanan ini ke database layanan database: # nama gambar layanan ketiga: mongo # tentukan gambar untuk membangun kontainer dari port: - '27017: 27017' # tentukan penerusan port

Saya cukup yakin perintah di file di atas tidak masuk akal bagi Anda. Jadi, mari kita selesaikan masalah itu.

Di baris pertama kode, saya telah menentukan versi Docker Compose yang saya gunakan. Ini adalah langkah yang sangat penting jika Anda ingin Compose berfungsi dengan baik tanpa menimbulkan kesalahan apa pun. Pastikan untuk mengunduh versi Docker Compose sesuai dengan versi Mesin Docker Anda.

Setelah itu, saya mendefinisikan tiga penampung dengan menggunakan kata kunci 'layanan'. Layanan ini mengacu pada tiga komponen tumpukan, ujung depan, ujung belakang, dan database saya. Jadi dalam kasus ini, nama container saya adalah nama layanan saya, yaitu 'angular', 'express' dan 'database'.

Kata kunci 'build' digunakan untuk menunjukkan bahwa dockerfile untuk memutar container itu ada di direktori itu. Tunggu, bingung gimana?

Itu mudah. Jalur harus ditentukan setelah 'build:'. Dalam kasus kami, 'angular-app' dan 'express-server' adalah jalur ke dua direktori yang dapat dijangkau dari direktori tempat File Tulis Docker ada. Untuk wadah database kami, saya hanya mengatakan menggunakan basis 'image: mongo' bukan jalur ke dockerfile.

Untuk setiap layanan ini, saya juga menentukan nomor port yang dapat digunakan untuk menerima / mengirim permintaan dari wadah (layanan) lain. 4200 untuk sudut, 3000 untuk ekspres dan 27017 untuk mongo.

Selain itu, penampung ekspres memiliki 'link:' ke penampung database, yang menunjukkan bahwa data apa pun yang diterima di sisi server akan dikirim ke database tempat ia akan disimpan.

Sekarang akhirnya, kita sampai pada kesimpulan menyiapkan Tulis. Untuk memulai Docker Compose dan memutar tiga container dengan tiga layanan, kita hanya perlu menjalankan dua perintah di bawah ini dari direktori di mana Docker Compose File (file YAML) ada:

buruh pelabuhan-menulis membangun buruh pelabuhan-menyusun

Perintah 'docker-compose build' digunakan untuk membangun / membangun kembali layanan sedangkan, perintah 'docker-compose up' digunakan untuk membuat / memulai container. Lanjutkan! Cobalah sendiri.

Di bawah ini adalah tangkapan layar dari gambar Docker yang sedang dibangun dan kemudian dieksekusi. Anda dapat melihat bahwa gambar Angular sedang dibangun dan kemudian diberi tag dengan nama 'angular: terbaru'.

Selain itu, gambar untuk Express dibuat dengan nama dan tag sebagai 'express: latest'.

Sekarang setelah gambar dibuat, mari kita coba menjalankannya dan memutar container dalam prosesnya. Di bawah ini adalah tangkapan layar itu.

Di bawah ini adalah tangkapan layar yang mengatakan 'webpack: berhasil dikompilasi' yang berarti bahwa tiga layanan berhasil dimasukkan ke dalam container oleh Docker.

Sekarang setelah kontainer di-host, Anda dapat melihat layanan yang aktif di porta masing-masing. Ketik nomor port berikut di browser web Anda untuk berinteraksi dengan GUI aplikasi MEAN.

localhost: 4200 - Aplikasi Sudut (Front-end)
localhost: 3000 - Express Server & NodeJS (Back-end / Server-side)
localhost: 27017 - MongoDB (Database)

Terkesan belum? Tunggu, karena Docker belum selesai! Kita dapat menggunakan perintah “docker-compose scale =’ x '”untuk meningkatkan / menurunkan jumlah penerapan dengan mudah. Dengan kata lain, kita dapat membuat container sebanyak itu untuk suatu layanan. Di bawah ini adalah perintah lengkap untuk menskalakan layanan tertentu ke container '5':

skala docker-compose = 5

Meningkatkan layanan dengan mudah, mengemas dan mengemasnya dengan cara yang hemat biaya adalah apa yang menjadikan Docker salah satu alat penyebaran terbaik dan favorit pribadi saya.

Jika Anda masih ragu dengan konsep ini, maka Anda dapat menonton video di bawah ini di mana saya telah menjelaskan konsep yang sama dengan praktik langsung tentang cara menyiapkan Docker Compose.

Docker Compose | Aplikasi Containerizing MEAN Stack | Tutorial DevOps

Sekarang Anda telah mempelajari tentang Docker, lihat file oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus Pelatihan Sertifikasi Docker Edureka ini membantu peserta didik mendapatkan keahlian dalam mengimplementasikan Docker dan menguasainya.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar dan kami akan menghubungi Anda kembali.