Cara Menghidupkan Kembali Aplikasi Lama dengan Docker Container

Containerization telah mengubah cara aplikasi baru dikembangkan dan disebarkan. Namun banyak organisasi mempertahankan katalog belakang sistem yang lebih tua yang memerlukan pendekatan yang berbeda. Putusnya hubungan antara baru dan lama ini tidak harus terus berlanjut: Anda juga dapat mengemas sistem lama sebagai wadah, sehingga lebih mudah untuk terus mengembangkannya dengan metode pengembangan yang lebih modern.

Dalam artikel ini, kita akan melihat proses yang dapat Anda gunakan untuk mulai menyimpan perangkat lunak “warisan”. Meskipun tidak ada dua produk yang akan sama, dan istilah “warisan” bersifat subjektif, kami akan fokus pada langkah-langkah yang berlaku secara luas untuk mengemas sistem yang digabungkan secara erat yang saat ini terkait dengan lingkungan individual.

1. Identifikasi Kandidat Sistem

Sebaiknya siapkan inventaris sistem terlebih dahulu yang memungkinkan Anda mengidentifikasi kandidat yang baik untuk penampung. Dalam beberapa kasus, Anda mungkin menyimpulkan bahwa aplikasi tertentu tidak dapat ditampung. Ini biasanya terjadi jika persyaratan perangkat kerasnya sudah mendarah daging atau bergantung pada fitur kernel dan bahasa pemrograman yang sudah usang. Cari aplikasi yang sudah cukup mandiri jika Anda benar-benar baru dalam containerization. Memilih sistem yang digunakan dengan baik tetapi tidak misi-kritis akan memberi Anda kelonggaran jika ada yang salah sambil memungkinkan Anda untuk mengenali manfaat dari migrasi yang berhasil.

2. Componentize The System

Anda dapat menyimpan sistem kandidat Anda dengan menulis Dockerfile, termasuk semua dependensi aplikasi, dan menyebutnya sehari. Meskipun ini adalah cara yang valid untuk dengan cepat memasukkan sistem ke dalam wadah, itu seharusnya tidak menjadi tujuan akhir dari upaya Anda. Kontainer monolitik akan menghasilkan build yang panjang, ukuran gambar yang besar, dan skalabilitas yang buruk.

Sebaliknya, Anda harus mencari peluang untuk membagi setiap sistem menjadi komponen individual. Komponen-komponen itu harus berakhir di wadahnya sendiri, mencegah setiap bagian menjadi terlalu besar. Anda akan dapat menskalakan komponen satu per satu dengan membuat replika tambahan container yang dibatasi sumber daya.

Langkah ini juga penting dalam membangun modularitas keseluruhan dan mendorong adopsi container lebih lanjut. Saat Anda memisahkan lebih banyak sistem ke dalam komponennya, Anda akan mulai menemukan tumpang tindih yang memungkinkan Anda menggunakan kembali gambar container yang telah Anda buat. Anda akan melihat bahwa secara bertahap menjadi lebih mudah untuk melanjutkan containerizing.

Memutuskan tempat untuk memisahkan komponen seharusnya tidak terasa terlalu berat. Mulailah dengan mengidentifikasi di mana sistem bergantung pada layanan yang sudah berada di luar kode sumbernya. Koneksi database, antrian pesan, server email, proxy, dan gateway semuanya harus independen dari komponen yang mereka tambahkan. Anda akan memisahkan ini ke dalam wadahnya sendiri yang berada di samping instance yang menjalankan kode Anda.

Mencari peluang untuk memperbaiki apa yang tersisa juga bermanfaat. Apakah layanan Anda memiliki terlalu banyak tanggung jawab yang dapat dibagi sebagai unit fungsional yang terpisah? Anda mungkin memiliki API profil pengguna yang menerima unggahan foto; layanan yang mengubah ukuran foto-foto itu bisa menjadi kandidat yang baik untuk berjalan secara mandiri di containernya sendiri.

3. Persiapkan Komponen Anda

Setelah memisahkan komponen, Anda perlu mempersiapkannya untuk beroperasi di lingkungan dalam container. Container memiliki beberapa perbedaan utama dibandingkan dengan VM tradisional. Penyimpanan persisten, konfigurasi, dan tautan antar komponen adalah tiga hal yang paling penting untuk dipertimbangkan di awal.

Penyimpanan Persisten

Container adalah lingkungan yang bersifat sementara. Modifikasi sistem file hilang saat kontainer Anda berhenti. Anda bertanggung jawab untuk mengelola data persisten aplikasi Anda menggunakan mekanisme yang disediakan oleh runtime container Anda.

Dalam kasus Docker, volume digunakan untuk menyimpan data di luar instance container Anda. Volume dipasang ke jalur tertentu di dalam wadah. Untuk menghindari keharusan memasang lusinan volume, yang terbaik adalah memusatkan data aplikasi Anda dalam beberapa direktori tingkat atas. Memasang volume ke lokasi tersebut akan menjamin kegigihan file yang disimpan aplikasi Anda.

Penting untuk mengaudit interaksi sistem file aplikasi Anda untuk memahami volume mana yang Anda butuhkan dan masalah apa pun yang akan Anda hadapi. Tidak memperhatikan langkah ini bisa memakan biaya jika data yang Anda anggap bertahan hilang setiap kali wadah dimulai ulang.

Managing Configuration

Banyak aplikasi lama dikonfigurasi menggunakan file konfigurasi statis. Ini mungkin dalam format khusus, seperti XML, JSON, atau INI, atau dikodekan menggunakan bahasa pemrograman sistem.

Containers biasanya dikonfigurasi oleh variabel lingkungan eksternal. Variabel ditentukan saat container dibuat, menggunakan mekanisme seperti flag -e Docker dengan docker run. Mereka disuntikkan ke lingkungan container yang sedang berjalan.

Menggunakan sistem ini memastikan Anda dapat mengandalkan toolchain container Anda untuk mengatur dan mengubah parameter konfigurasi. Anda mungkin harus memfaktorkan ulang aplikasi Anda terlebih dahulu untuk mendukung pengaturan pembacaan dari variabel lingkungan. Salah satu cara umum untuk memudahkan transisi adalah dengan menempatkan skrip kecil di dalam titik masuk penampung. Ini dapat menghitung variabel lingkungan saat pembuatan wadah dan menuliskannya ke dalam file konfigurasi untuk aplikasi Anda.

Links Between Services

Containerization juga membuat Anda berpikir tentang jaringan antar-layanan. Layanan umumnya tidak saling terbuka kecuali dengan konfigurasi eksplisit. Anda dapat mengatur penautan otomatis di Docker dengan menggabungkan beberapa kontainer ke jaringan Docker yang sama. Ini menawarkan fungsi penemuan layanan yang memungkinkan container menjangkau satu sama lain dengan nama.

Teknologi containerisasi lainnya menggunakan pendekatan berbeda untuk jaringan dan penemuan layanan. Setelah memisahkan sistem Anda menjadi komponen individual, Anda perlu mengikatnya kembali menggunakan fasilitas yang ditawarkan oleh runtime Anda. Sifat penyebaran dalam container berarti seringkali ada lebih banyak kerumitan daripada jaringan antara VM atau host fisik. Lalu lintas perlu dialihkan dan beban seimbang antara semua replika penampung Anda dan dependensinya sehingga Anda harus memahami persyaratan ini sejak dini.

4. Tulis Dockerfiles

Anda Setelah Anda merencanakan arsitektur Anda, Anda dapat memulai pekerjaan fisik yang terkait dengan containerization. Langkah pertama adalah menulis Dockerfiles untuk komponen aplikasi Anda. Ini menentukan urutan perintah dan tindakan yang membuat sistem file yang berisi semua komponen yang dibutuhkan untuk menjalankan.

Dockerfiles dimulai dengan gambar dasar yang sesuai yang dirujuk oleh pernyataan FROM. Ini biasanya merupakan sistem operasi (ubuntu:20.04, alpine:3) atau lingkungan bahasa pemrograman yang dibuat sebelumnya (php:8, node:16). Anda dapat memilih gambar yang paling cocok dengan lingkungan aplikasi yang ada. Memulai dari sistem file kosong dimungkinkan tetapi biasanya tidak diperlukan kecuali jika Anda memerlukan kontrol yang sangat terperinci.

Konten tambahan dilapiskan ke gambar dasar dengan instruksi seperti COPY dan RUN. Ini memungkinkan Anda menyalin file dari host Anda dan menjalankan perintah terhadap sistem file sementara build. Setelah Anda menulis Dockerfile, Anda dapat membangunnya dengan docker build -t my-image:latest . perintah.

5. Atur Orchestration

Dengan asumsi Anda telah membuat komponen sistem Anda, Anda akan mendapatkan satu gambar kontainer untuk setiap bagian. Sekarang Anda memerlukan cara untuk menampilkan semua container secara bersamaan sehingga Anda dapat dengan mudah memulai instance aplikasi yang berfungsi.

Instalasi produksi yang lebih besar biasanya menggunakan Kubernetes untuk tujuan ini. Ini adalah sistem orkestrasi khusus yang menambahkan konsep tingkat yang lebih tinggi untuk membuat penerapan kemas yang direplikasi. Sistem dan lingkungan pengembangan yang lebih kecil sering kali dilayani dengan baik oleh Docker Compose, alat yang bergantung pada file YAML yang lebih sederhana untuk memulai “tumpukan” beberapa wadah:

version: "3" 
app: image: my-web-app:latest 
ports: - 80:80 
database: 
   image: mysql:8.0 
   port: - 3306:3306

File docker-compose.yml memungkinkan Anda memulai semua layanannya menggunakan biner docker-compose:

docker-compose up -d

Menyiapkan beberapa bentuk orkestrasi membuat wadah Anda armada lebih mudah dikelola dan memfasilitasi penskalaan melalui replikasi. Baik Kubernetes dan Docker Compose dapat memulai beberapa instance layanan Anda, kemampuan yang tidak dapat dicapai dengan aplikasi lama yang dibentuk dari component.

6 Pantau dan Memperluas Container Fleet

Containerization Anda tidak berakhir dengan memulai sebuah instance dari aplikasi Anda. Untuk mendapatkan hasil maksimal dari teknologi ini, Anda perlu memantau container dengan benar untuk tetap mengetahui kesalahan dan pemanfaatan sumber daya.

Sistem yang lebih besar paling baik dilayani oleh platform observabilitas khusus yang dapat menggabungkan log dan metrik dari seluruh armada Anda. Anda mungkin sudah menggunakan solusi serupa dengan penerapan aplikasi lawas Anda, tetapi ini bahkan lebih penting untuk container. Observabilitas yang baik akan memungkinkan Anda melacak masalah kembali ke instance container asalnya, memunculkan wawasan yang penting saat Anda memiliki ratusan atau ribuan replika.

Untuk terus memperluas armada Anda, perbanyak dokumentasi dan standardisasi. Kita telah melihat bagaimana membagi sistem menjadi komponen membantu penggunaan kembali di masa mendatang. Namun ini hanya bekerja secara efektif jika Anda telah mendokumentasikan apa yang Anda miliki dan bagaimana masing-masing bagian cocok satu sama lain. Meluangkan waktu untuk menulis tentang sistem Anda dan proses yang telah Anda lalui akan merampingkan pekerjaan di masa depan. Ini juga akan membantu anggota tim baru memahami keputusan yang Anda buat.

Apakah Cara ini Layak?

Containerization bermanfaat ketika Anda merasa pengembangan sistem terhambat oleh prosesnya saat ini. Mampu menerapkannya sebagai satu set wadah menyederhanakan pengalaman pengembangan dan memberi Anda lebih banyak fleksibilitas dalam penerapan. Sekarang Anda dapat meluncurkan layanan di mana pun container runtime tersedia, baik itu satu instans di laptop Anda atau 1.000 di penyedia cloud publik. mengurangi biaya infrastruktur di tempat. Namun, kemenangan nyata ini dapat diimbangi dengan kebutuhan untuk melatih ulang insinyur, merekrut bakat khusus baru, dan memelihara container Anda dari waktu ke waktu.

Keputusan untuk menyimpan sistem lama perlu mempertimbangkan nilai sistem tersebut bagi bisnis Anda, waktu yang dihabiskan saat ini mempertahankannya, dan kemungkinan pengurangan akibat penggunaan wadah. Mungkin layanan berprioritas rendah sebaiknya dibiarkan sendiri jika proses yang terkait dengannya tidak menyebabkan masalah langsung.

Harus diakui bahwa tidak semua aplikasi lawas akan membutuhkan atau mampu menggunakan setiap manfaat containerisasi yang disebut-sebut. Adopsi adalah spektrum, mulai dari menjalankan sistem dalam wadah monolitik tunggal, hingga komponenisasi, orkestrasi, dan integrasi penuh dengan rangkaian observabilitas. Model terakhir adalah target ideal untuk aplikasi bisnis-kritis yang para insinyur berkembang setiap hari; sebaliknya, yang pertama mungkin memadai untuk layanan yang jarang disentuh di mana hambatan utamanya adalah waktu yang dihabiskan untuk menyediakan lingkungan pengembangan berbasis VM baru. Memecah proses menjadi langkah-langkah yang berbeda biasanya membantu menentukan di mana Anda berada dan di mana Anda ingin berada. Dalam artikel ini, kami telah melihat enam tahapan granular yang dapat Anda gunakan untuk mendekati containerisasi sistem yang ada. Kami juga telah membahas beberapa pertimbangan yang perlu Anda buat saat memutuskan apakah akan melanjutkan.

Dari sudut pandang konseptual, menyimpan aplikasi lama sedikit berbeda dengan bekerja dengan yang baru. Anda menerapkan prinsip komponenisasi, layanan tertaut, dan konfigurasi yang sama yang disuntikkan dari lingkungan luar. Sebagian besar sistem relatif mudah untuk ditampung jika dilihat dari perspektif ini. Berfokus pada aspek-aspek ini akan membantu Anda memisahkan aplikasi, membuat komponen yang skalabel, dan merancang metodologi containerization yang efektif.

Itulah berita seputar Cara Menampung Aplikasi Lama, semoga bermanfaat. Disadur dari HowToGeek.com.

Scroll to Top