Docker adalah alat pengembangan yang populer karena menyederhanakan memulai instance aplikasi Anda yang terpisah dengan konfigurasi yang dapat direproduksi. Ini juga dapat digunakan dalam produksi yang memastikan penerapan langsung identik dengan lingkungan pengembangan Anda.
Memasukkan container ke dalam produksi tidak selalu semudah menjalankannya docker run pada mesin lokal Anda. Bukan ide yang baik untuk mendorong gambar secara manual ke registri, menyambungkan ke host Docker jarak jauh, dan memulai wadah Anda. Ini bergantung pada intervensi manusia dan karena itu memakan waktu dan rawan kesalahan.
Dalam panduan ini, kita akan melihat tiga pendekatan berbeda yang dapat Anda gunakan yang memudahkan untuk mengotomatiskan penerapan Docker dan mempertahankan konfigurasi yang konsisten. Teknik ini dapat dituliskan sebagai bagian dari pipeline CI untuk memulai container baru setiap kali kode Anda berubah. Anda perlu membangun image Docker dan mendorongnya ke registri sebagai tahap pertama dalam skrip Anda, kemudian menggunakan salah satu teknik di bawah ini untuk menarik image dan memulai container di lingkungan produksi Anda.
1. Penulisan Docker Melalui SSH
Docker Compose memungkinkan Anda memulai beberapa container dengan satu perintah. Selain itu, Compose dikonfigurasi melalui file YAML yang membantu perubahan versi Anda dan menjamin penerapan yang dapat direproduksi.
Anda mungkin sudah menggunakan Compose sebagai alat pengembangan lokal. Anda perlu membuat docker-compose.yml file di direktori kerja Anda, lalu tambahkan satu atau lebih services yang menentukan wadah untuk memulai dengan:
version: 3
services:
app:
image: example.com/app:latest
ports:
- 80:80
database:
image: mysql:8.0
expose:
- 3306
Setelah Anda memiliki file Tulis, gunakan docker-compose up -d perintah untuk meluncurkan container Anda. Jika Anda mengubah file, ulangi perintah untuk menerapkan perubahan Anda. Compose akan memperbarui atau mengganti container untuk mencapai status yang baru dideklarasikan.
Menambahkan --pull flag memberi tahu Email untuk mencoba dan menarik gambar yang diperbarui sebelum memulai wadah. Anda juga bisa menggunakan --force-recreate untuk memaksa pembuatan container baru, meskipun konfigurasi dasarnya tidak berubah.
Bagaimana semua ini berhubungan dengan penerapan produksi? Ini berarti Anda dapat menggunakan Compose sebagai bagian dari pipeline CI untuk memulai container dengan mudah yang memenuhi status yang Anda nyatakan di docker-compose.yml mengajukan. berlari docker-compose up -d --pull di setiap pipa akan memberi Anda satu set wadah yang masing-masing menjalankan versi terbaru dari gambar mereka.
Ada beberapa cara Anda dapat menerapkan metode ini. Rute paling sederhana dan teraman adalah menginstal Docker dan Compose di host produksi Anda, lalu menghubungkannya menggunakan SSH. Anda harus menggunakan pengaturan penyedia CI Anda untuk menyimpan kredensial SSH sebagai variabel yang dapat diakses di saluran Anda. Kemudian Anda mengonfigurasi klien SSH di saluran Anda, salin file docker-compose.yml file di host jarak jauh Anda, dan jalankan docker-compose up memesan
Berikut adalah contoh skrip:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo $SSH_PRIVATE_KEY | ssh-add -
echo $SSH_HOST_KEY > ~/.ssh/known_hosts
scp docker-compose.yml:ci-user@example.com:/home/ci-user/docker-compose.yml
ssh -t ci-user@example.com docker-compose up -d
Atau, Anda dapat menggunakan konteks Docker untuk menjalankan biner Compose secara lokal, dalam lingkungan pipeline Anda. Ini akan mengharuskan Anda untuk mengekspos soket Docker pada host jarak jauh Anda; karena ini mungkin merupakan risiko keamanan, pendekatan ini umumnya tidak menguntungkan dalam situasi di mana SSH juga dapat digunakan.
Mengikuti metode ini, Anda akan menginstal Docker dan Compose pada host yang menjalankan pipeline Anda. Di dalam skrip pipeline Anda, Anda akan mendaftar dan memilih konteks Docker yang menunjuk ke host produksi jarak jauh Anda. Detail koneksi harus diberikan sebagai variabel yang disetel di panel pengaturan penyedia CI Anda. Dalam konteks yang dipilih, Anda akan menjalankan docker-compose up -d di lingkungan pipa Anda tetapi lihat perintah yang dijalankan terhadap server jarak jauh.
2. Menggunakan Platform-as-a-Service (PaaS)
Mengadopsi penawaran Platform-as-a-Service (PaaS) adalah pendekatan lain untuk menjalankan container Docker dalam produksi. Anda dapat menghosting sendiri dengan solusi seperti Dokku atau memilih penawaran yang dihosting seperti Amazon ECS, Platform Aplikasi DigitalOcean, atau Heroku.
PaaS menghilangkan kerumitan membangun gambar, mempertahankan konfigurasi terperinci, dan menyediakan host Docker Anda sendiri. Anda dapat menggunakan Git untuk mendorong repositori Anda langsung ke platform atau menjalankan perintah CLI untuk mengunggah perubahan Anda. PaaS menangani pembuatan container dari aset sumber, Dockerfile, atau file konfigurasi khusus platform Anda.
Solusi PaaS adalah cara yang bagus untuk online dengan cepat dengan interaksi Docker langsung yang minimal. Mereka mudah diintegrasikan ke dalam saluran CI Anda dan sebagian besar penyedia utama menawarkan skrip contoh untuk Anda mulai. Namun, ada kemungkinan PaaS tumbuh yang berarti Anda perlu memikirkan kembali infrastruktur Anda di masa mendatang.
Langkah-langkah untuk mengotomatiskan penerapan pada platform yang Anda pilih akan bervariasi menurut penyedia. Jika Anda menggunakan Dokku atau PaaS serupa dengan integrasi Git, skrip CI Anda bisa sesederhana dua baris:
git remote add dokku dokku@example.com:app-name
git push dokku master
Script menambahkan server Dokku Anda sebagai remote Git dan mendorong konten repositori. Dokku akan secara otomatis menghasilkan gambar dari . Anda Dockerfile dan mulai instance container. Anda perlu menambahkan kunci publik SSH server CI Anda ke Dokku agar ini berfungsi; jika tidak, skrip CI Anda tidak akan dapat mengautentikasi ke platform.
3. Orkestrasi Dengan Kubernetes/Docker Swarm
Menggunakan orkestra seperti Kubernetes atau Docker Swarm mungkin merupakan cara paling umum untuk menjalankan instance container langsung. Alat ini dibuat khusus untuk menerapkan dan menskalakan container di lingkungan produksi.
Orchestrator menghilangkan kompleksitas manajemen infrastruktur, memungkinkan Anda untuk fokus pada aplikasi dan komponennya. Mirip dengan Docker Compose, mereka mengambil pendekatan deklaratif untuk konfigurasi keadaan di mana Anda menentukan seperti apa keadaan akhirnya. Orkestra menentukan urutan tindakan yang benar untuk mencapai keadaan itu.
Kubernetes adalah orkestrasi paling populer. Salah satu cara untuk berinteraksi dengan cluster Kubernetes adalah dengan Kubectl, alat manajemen CLI resmi. Kubectl memungkinkan Anda menerapkan file manifes dalam format YAML yang menentukan resource container yang akan dibuat di cluster Anda.
Berikut adalah manifes sederhana yang membuat instance container:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: example.com/image:latest
Anda dapat menggunakan Kubectl untuk menerapkan manifes ini ke sebuah cluster:
kubectl apply -f manifest.yaml
Perubahan selanjutnya pada file diterapkan dengan mengulangi perintah. Kubernetes secara otomatis mengambil tindakan yang diperlukan untuk mencapai status yang baru dideklarasikan.
Ini menjadikan Kubernetes pilihan yang baik untuk penerapan produksi otomatis. Anda dapat menggunakannya kubectl apply dalam pipeline Anda untuk mengambil manifes di repositori Anda dan menerapkan status yang dideklarasikan ke cluster Anda. Membuat tag gambar baru untuk setiap komit akan membuat Kubernetes menarik gambar itu dan memulai wadah baru untuk penerapan.
Untuk mengaturnya, Anda perlu menyediakan konten file konfigurasi Kubeconfig sebagai variabel pipeline. Ini memberi Kubectl kredensial yang akan digunakan untuk koneksi cluster Anda. Biner Kubectl lokal akan berjalan melawan klaster jarak jauh Anda.
Docker Swarm adalah opsi orkestrasi lain yang disertakan dengan Docker. Anda dapat mengatur tumpukan Swarm menggunakan keduanya docker-compose.yml berkas seperti yang dijelaskan sebelumnya. Teknik penyebaran serupa dapat digunakan, baik menghubungkan ke host Swarm melalui SSH atau menggunakan konteks Docker untuk memodifikasi target binari Docker lokal.
Orkestrasi lebih kompleks daripada menggunakan Compose biasa atau PaaS terkelola. Dalam kasus Kubernetes, Anda perlu mempelajari abstraksi, terminologi, dan format file konfigurasi baru sebelum Anda dapat men-deploy container Anda. Namun, cluster juga memberi Anda kemampuan tambahan yang mempermudah pemeliharaan aplikasi dalam jangka panjang. Anda dapat dengan mudah menskalakan replika di beberapa host, membangun redundansi, dan menggabungkan log dan metrik.
Oleh karena itu, orkestrasi adalah pilihan terbaik untuk sistem yang lebih besar yang menjalankan banyak container. Itu tidak berarti perhatian industri yang diterima alat tersebut harus menyebabkan Anda menggunakan Kubernetes untuk setiap penerapan. Email atau PaaS akan lebih mudah diatur, dikelola, dan dipelihara untuk kasus penggunaan yang lebih kecil di mana Anda tidak terlalu peduli dengan skalabilitas dan penguncian vendor.
Ringkasan
Kami melihat tiga cara berbeda menjalankan container sebagai beban kerja produksi. Detail implementasi akan bervariasi tergantung pada pendekatan yang Anda pilih, rantai alat pendukung, dan lingkungan CI, jadi kami telah menghilangkan deskripsi yang tepat tentang bagaimana Anda dapat menyiapkan otomatisasi sebagai bagian dari alur kerja Anda. Namun, ketiganya dapat dengan mudah diintegrasikan ke dalam pipa CI yang berjalan setiap kali Anda mengkompilasi atau mendorong kode Anda.
Orkestrasi menggunakan alat seperti Kubernetes dengan cepat menjadi metode pilihan untuk penerapan skalabel dari sistem yang menjalankan banyak container. Meskipun hal ini dapat sangat menyederhanakan pengoperasian layanan yang dirancang untuknya, hal ini juga menyebabkan kurva pembelajaran dan biaya pemeliharaan yang signifikan sehingga Anda tidak boleh masuk tanpa mempertimbangkan alternatifnya.
Sistem yang lebih kecil yang dibangun dari beberapa komponen dapat melihat hasil yang lebih baik dari penggunaan Compose untuk memulai container dengan konfigurasi yang dapat direproduksi pada host Docker yang ada. Ini memberikan beberapa manfaat Kubernetes, seperti konfigurasi deklaratif, tanpa kerumitan tambahan. Anda dapat “mempercepat” orkestrasi nanti dengan menambahkan dukungan Docker Swarm ke file Compose yang ada, memungkinkan Anda untuk memulai beberapa replika container yang terdistribusi.
Terakhir, opsi Platform-as-a-Service mempercepat penerapan aplikasi tanpa Anda harus memikirkan detail container granular. Layanan ini menawarkan prospek otomatisasi infrastruktur penuh dari konfigurasi minimal. Namun, mereka dapat membatasi dalam jangka panjang, jadi pikirkan bagaimana solusi Anda akan berkembang seiring waktu sebelum berkomitmen.
Saat men-deploy container apa pun dalam produksi, Anda juga harus mempertimbangkan hosting gambar dan injeksi konfigurasi. Anda dapat menggunakan layanan registri publik untuk membuat gambar Anda tersedia di lingkungan produksi Anda. Atau, Anda dapat menjalankan registri pribadi Anda sendiri dan memberikan kredensial sebagai bagian dari saluran CI Anda. Nilai konfigurasi biasanya diberikan sebagai variabel lingkungan yang dapat Anda tentukan di layar pengaturan penyedia CI Anda.

