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:
- Untuk Kontainer Docker Berbasis Debian
- 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.