GNU/Linux >> Belajar Linux >  >> Panels >> Docker

3 Strategi untuk Penerapan Produksi Otomatis Dengan Docker

Docker adalah alat pengembangan yang populer karena menyederhanakan memulai instance aplikasi Anda yang terisolasi 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 menjalankan docker run pada mesin lokal Anda. Bukan ide yang bagus untuk secara manual mendorong gambar ke registri, menghubungkan ke host Docker jarak jauh, dan memulai wadah Anda. Ini bergantung pada intervensi manusia sehingga memakan waktu dan rawan kesalahan.

Dalam panduan ini, kita akan melihat tiga strategi berbeda yang dapat Anda gunakan yang memudahkan untuk mengotomatiskan penerapan Docker dan mempertahankan konfigurasi yang konsisten. Pendekatan ini dapat dituliskan sebagai bagian dari pipeline CI untuk memulai container baru setiap kali kode Anda berubah. Anda harus membuat image Docker dan mendorongnya ke registry sebagai tahap pertama dalam skrip Anda, kemudian menggunakan salah satu teknik di bawah 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 Anda mengubah versi dan menjamin penerapan yang dapat direproduksi.

Anda mungkin telah 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:

version: 3
services:
  app:
    image: example.com/app:latest
    ports:
      - 80:80
  database:
    image: mysql:8.0
    expose:
      - 3306

Setelah Anda mendapatkan file Compose, gunakan docker-compose up -d perintah untuk meluncurkan container Anda. Jika Anda memodifikasi file, ulangi perintah untuk menerapkan perubahan Anda. Compose akan memperbarui atau mengganti container untuk mencapai status baru yang dideklarasikan.

Menambahkan --pull flag menginstruksikan Compose untuk mencoba dan menarik gambar yang diperbarui sebelum memulai container. Anda juga dapat menggunakan --force-recreate untuk memaksa pembuatan container baru, meskipun konfigurasi dasarnya tidak berubah.

Bagaimana semua ini berhubungan dengan penyebaran produksi? Artinya, Anda dapat menggunakan Compose sebagai bagian dari pipeline CI untuk memulai container dengan mudah yang memenuhi status yang Anda nyatakan di docker-compose.yml Anda mengajukan. Menjalankan docker-compose up -d --pull di setiap saluran akan memberi Anda satu set wadah yang masing-masing menjalankan versi terbaru gambarnya.

Ada beberapa cara Anda dapat menerapkan metode ini. Rute paling sederhana dan teraman adalah menginstal Docker dan Compose di host produksi Anda, lalu menghubungkannya melalui SSH. Anda harus menggunakan pengaturan penyedia CI Anda untuk menyimpan kredensial SSH sebagai variabel yang dapat diakses ke saluran Anda. Anda kemudian akan mengonfigurasi klien SSH di saluran Anda, salin docker-compose.yml file ke host jarak jauh Anda, dan jalankan  docker-compose up perintah.

Berikut contoh skripnya:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo $SSH_PRIVATE_KEY | ssh-add -
echo $SSH_HOST_KEY > ~/.ssh/known_hosts
scp docker-compose.yml:[email protected]:/home/ci-user/docker-compose.yml
ssh -t [email protected] 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 dapat menjadi risiko keamanan, pendekatan ini umumnya kurang menguntungkan dalam situasi di mana SSH juga dapat digunakan.

Mengikuti metode ini Anda akan menginstal Docker dan Compose pada host yang menjalankan pipeline Anda. Dalam skrip saluran Anda, Anda akan mendaftar dan memilih konteks Docker yang menunjuk ke host produksi jarak jauh Anda. Detail koneksi perlu diberikan sebagai variabel yang diatur di panel pengaturan penyedia CI Anda. Dengan konteks yang dipilih, Anda akan menjalankan docker-compose up -d di lingkungan pipeline 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 solusi Anda sendiri dengan solusi seperti Dokku atau memilih penawaran yang dihosting seperti Amazon ECS, Platform Aplikasi DigitalOcean, atau Heroku.

PaaS mengabstraksi kerumitan membangun gambar, mempertahankan konfigurasi terperinci, dan menyediakan host Docker Anda sendiri. Anda dapat menggunakan Git untuk langsung mendorong repositori Anda 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, PaaS mungkin saja tumbuh lebih besar, yang berarti Anda perlu memikirkan kembali infrastruktur Anda di masa mendatang.

Langkah-langkah untuk mengotomatiskan penerapan ke 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 [email protected]:app-name
git push dokku master

Script menambahkan server Dokku Anda sebagai remote Git dan mendorong konten repositori. Dokku akan secara otomatis membuat gambar dari Dockerfile Anda 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 bisa dibilang cara paling umum untuk menjalankan instance container langsung. Alat ini dibuat khusus untuk menerapkan dan menskalakan container di lingkungan produksi.

Orchestrator menghilangkan kerumitan manajemen infrastruktur, memungkinkan Anda fokus pada aplikasi dan komponennya. Serupa dengan Docker Compose, mereka mengambil pendekatan deklaratif untuk konfigurasi status di mana Anda menentukan seperti apa status akhir. Orkestra menentukan urutan tindakan yang benar untuk mencapai status tersebut.

Kubernetes adalah orkestra 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 tunggal:

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 baru yang dideklarasikan.

Hal ini menjadikan Kubernetes pilihan yang bagus untuk penerapan produksi otomatis. Anda dapat menggunakan 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 container baru untuk penerapan.

Untuk mengatur ini, Anda harus menyediakan konten file konfigurasi Kubeconfig sebagai variabel pipeline. Ini memberi Kubectl kredensial yang akan digunakan untuk koneksi cluster Anda. Biner Kubectl lokal kemudian akan beroperasi terhadap klaster jarak jauh Anda.

Docker Swarm adalah opsi orkestrasi lain yang terintegrasi dengan Docker. Anda dapat mengatur tumpukan Swarm menggunakan docker-compose.yml yang sama berkas seperti yang dijelaskan sebelumnya. Pendekatan penerapan serupa kemudian dapat digunakan, baik menghubungkan ke host Swarm melalui SSH atau menggunakan konteks Docker untuk memodifikasi target biner Docker lokal.

Pengatur jauh 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 ekstra 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 wadah. Itu tidak berarti perhatian industri yang diterima alat tersebut harus menyebabkan Anda menggunakan Kubernetes untuk setiap penerapan. Compose atau PaaS akan lebih mudah disiapkan, dipertimbangkan, dan dipelihara untuk kasus penggunaan yang lebih kecil di mana Anda tidak terlalu peduli dengan skalabilitas dan penguncian vendor.

Ringkasan

Kami telah melihat tiga cara berbeda menjalankan container sebagai beban kerja produksi. Detail implementasi akan bervariasi tergantung pada strategi 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 pipeline CI yang berjalan setiap kali Anda menggabungkan atau mendorong kode Anda.

Orkestrasi menggunakan alat seperti Kubernetes dengan cepat menjadi metode pilihan untuk penerapan sistem yang skalabel yang menjalankan banyak wadah. Meskipun dapat sangat menyederhanakan pengoperasian layanan yang dirancang untuknya, ini juga membawa kurva pembelajaran dan overhead pemeliharaan yang signifikan sehingga Anda tidak boleh masuk tanpa mempertimbangkan alternatif.

Sistem yang lebih kecil yang dibentuk 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 “memudahkan” orkestrasi nanti dengan menambahkan dukungan Docker Swarm ke file Compose yang ada, memungkinkan Anda memulai beberapa replika container terdistribusi.

Terakhir, opsi Platform-as-a-Service mempercepat penerapan aplikasi tanpa membuat Anda memikirkan detail container granular. Layanan ini menawarkan prospek otomatisasi infrastruktur penuh dari konfigurasi minimal. Namun, mereka dapat membatasi dalam jangka panjang, jadi pikirkan tentang bagaimana solusi Anda akan berkembang dari waktu ke waktu sebelum berkomitmen.

Saat menerapkan wadah apa pun ke 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 menyediakan kredensial sebagai bagian dari saluran CI Anda. Nilai konfigurasi biasanya diberikan sebagai variabel lingkungan yang dapat Anda tentukan di layar pengaturan penyedia CI Anda.


Docker
  1. 10 Tips Mudah Diikuti untuk Mengelola Instans Nextcloud yang Dihosting Sendiri dengan Docker

  2. 7 Tips Berguna untuk Menghosting Sendiri Instance Hantu Dengan Docker

  3. Pengantar Kontainer Docker

  1. Cara Melakukan Deployment Canary dengan Istio

  2. Apa itu Doker? Pelajari Cara Menggunakan Wadah – Dijelaskan dengan Contoh

  3. Apa itu Docker Container:Panduan Pengantar untuk Pemula

  1. Docker vs. Kubernetes

  2. Pantau dan Kelola Kontainer Docker dengan Portainer.io (alat GUI) – Bagian-2

  3. Pantau dan Kelola Kontainer Docker dengan Portainer.io (alat GUI) – Bagian-1