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

Cara Meningkatkan Kontainer Docker Secara Otomatis Saat Memperbarui Aplikasi Web Docker

Bayangkan skenario ini. Anda meng-host beberapa layanan web yang berjalan di wadah Docker. Saat layanan web memiliki rilis versi baru, Anda mengambil image Docker dan memperbarui container untuk memperbarui layanan.

Saya telah membahas memperbarui wadah Docker tanpa downtime sebelumnya, tetapi artikel ini bukan tentang memutakhirkan aplikasi web. Yang ini tentang memperbarui wadah sistem operasi itu sendiri.

Memutakhirkan OS yang berjalan di wadah secara manual bisa menjadi tugas yang menakutkan dari waktu ke waktu. Anda harus menjalankan sendiri perintah pemutakhiran yang relevan pada wadah yang sedang berjalan secara terpisah untuk mewujudkannya.

Bagaimana dengan menghilangkan langkah ekstra ini dan menggabungkan pembaruan OS bersama dengan pembaruan layanan?

Ini adalah trik otomatisasi yang saya gunakan saat memperbarui layanan web yang di-deploy dengan Docker Compose.

Kami akan menggunakan Ghost CMS sebagai contoh nyata berdasarkan penerapan ini.

DigitalOcean – Pengembang cloudMembantu jutaan pengembang dengan mudah membangun, menguji, mengelola, dan menskalakan aplikasi dari berbagai ukuran – lebih cepat dari sebelumnya.Logo DigitalOceanRoxana Ciobanu, CTO

Memperbarui wadah OS secara otomatis saat memperbarui layanan web

Anda hanya dapat membaca artikel ini untuk memahami apa yang saya lakukan. Tapi jika Anda ingin mengikutinya, Anda juga bisa melakukannya.

Saya akan menunjukkan dua contoh berbeda:

  1. Untuk Kontainer Docker Berbasis Debian
  2. Untuk Kontainer Docker Berbasis Alpine

Memutakhirkan Penampung Debian Secara Otomatis

Prosedur ini mengharuskan Anda untuk melakukan dua langkah:

Langkah 1:Perhatikan Instruksi CMD

Catat instruksi CMD yang akhirnya ditentukan di dalam WebApp Dockerfile.

Untuk melakukan ini, Anda perlu memeriksa Dockerfile yang digunakan untuk membuat gambar (Ghost untuk contoh ini):

Oleh karena itu, perintah sebenarnya di sini adalah node current/index.js .

Langkah 2:Tambahkan Setelan "Peningkatan Otomatis"

Tambahkan perintah pemutakhiran dan instruksi CMD yang dicatat di dalam bagian layanan Ghost dari file Docker Compose:

command: sh -c "apt update && apt -y upgrade && node current/index.js"

Mari kita lihat bagaimana akhirnya. Katakanlah, misalnya, Anda mempertimbangkan entri Docker Compose untuk layanan Ghost dari panduan yang dikutip di atas. Versi terbaru berdasarkan tutorial kami adalah:

    ghost:
      image: ghost:4.20.4
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apt update && apt -y upgrade && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Di sini, saya telah menetapkan perintah tepat setelah volumes bagian.

Memutakhirkan Kontainer Alpine Secara Otomatis

Prosedur ini sekali lagi mengharuskan Anda untuk melakukan dua langkah serupa:

Langkah 1:Perhatikan Instruksi CMD

Catat instruksi CMD yang akhirnya ditentukan di dalam WebApp Dockerfile.

Untuk melakukan ini, Anda perlu memeriksa Dockerfile (Ghost Alpine untuk contoh ini):

Ternyata, perintah di sini sama seperti yang terlihat untuk versi Debian sebelumnya:node current/index.js .

Langkah 2:Tambahkan Setelan "Peningkatan Otomatis"

Tambahkan perintah pemutakhiran dan instruksi CMD yang dicatat di dalam bagian layanan Ghost dari file Docker Compose:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"

Referensi Peningkatan Alpine.

Mari kita lihat bagaimana akhirnya (perhatikan kali ini saya akan menggunakan gambar alpine untuk Ghost). Katakanlah, misalnya, Anda mempertimbangkan entri Docker Compose untuk layanan Ghost dari panduan yang dikutip di atas. Versi terbaru berdasarkan tutorial kami adalah:

    ghost:
      image: ghost:4.20.4-alpine
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Itu saja. Mulai saat ini dan seterusnya, setiap kali Anda memperbarui WebApps tanpa waktu henti, perintah peningkatan penampung akan secara otomatis dipanggil dan kemudian aplikasi web Anda akan dieksekusi.

Catatan:Saat memperbarui aplikasi apa pun dengan mengubah nomor versi gambar di file penulisan buruh pelabuhan, Anda harus menonaktifkan sementara opsi perintah yang dibahas di sini dengan tagar. Setelah pembaruan selesai untuk aplikasi web, aktifkan kembali baris yang sama untuk memperbarui penampung itu sendiri. Kedua langkah ini (memperbarui aplikasi dan penampung) dapat dicapai tanpa waktu henti melalui penskalaan.

Tips Bonus

Berikut adalah daftar perintah untuk aplikasi populer lainnya seperti Nextcloud dan Rocket.Chat. Ingat, ini harus ditambahkan seperti yang Anda lihat untuk contoh Ghost.

Nextcloud

Untuk Debian:

command: sh -c "apt update && apt -y upgrade && apache2-foreground"

Untuk Pegunungan Alpen:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && apache2-foreground"

Rocket.Chat

command: sh -c "apt update && apt -y upgrade && node main.js"

Semoga artikel ini membantu Anda dalam aktivitas sysadmin Anda sehari-hari. Jika Anda memiliki pertanyaan, umpan balik, atau saran, silakan tinggalkan pemikiran Anda di bagian komentar di bawah.


Docker
  1. Cara Memperbarui Wadah Docker yang Berjalan Secara Otomatis

  2. Cara Mengekspor dan Mengimpor Kontainer Docker

  3. Cara Mendaftar Kontainer Docker

  1. Cara Menggunakan Tulis Docker

  2. Bagaimana Menghubungkan Kontainer Docker

  3. Cara Menyebarkan Aplikasi dengan Rancher

  1. Bagaimana Mengelola Kontainer Docker? Praktik terbaik

  2. Cara Menjaga Kontainer Docker Tetap Berjalan Saat Daemon Berhenti

  3. Bagaimana Melewati Variabel Lingkungan ke Docker Containers