Jalankan wadah Almalinux atau Rocky Linux 8 Docker dengan Systemd (systemctl)

Seperti yang kita ketahui secara default container Docker berjalan tanpa systemd berarti user tidak dapat menggunakan perintah systemctl. Itu karena container apa pun yang kita buat di Docker belum di-boot dengan init. Di sini kita belajar bagaimana menjalankan Systemd di dalam wadah Docker Alamlinux/Rocky Linux/CentOS 8.

Nah, pertanyaannya adalah mengapa kita mendapatkan error setiap kali kita menjalankan perintah systemctl di dalam wadah buruh pelabuhan? Apa alasan di baliknya?

Sebenarnya, sesuai dengan pengembang Docker, yang juga mereka rekomendasikan, seseorang harus menggunakan satu service di dalam wadah. Artinya jika Anda berencana untuk menginstal WordPress menggunakan wadah maka harus ada satu wadah per aplikasi. Misalnya Apache + PHP di satu wadah sementara MySQL di wadah lain. Oleh karena itu, Docker telah dikembangkan pada model ini yang berarti tidak perlu Systemd yang kita temukan di sistem Linux standar mana pun untuk mengelola dan menjalankan beberapa service secara paralel. Oleh karena itu, seperti yang disarankan Docker untuk menjalankan beberapa wadah untuk aplikasi yang berbeda, maka pengembang menonaktifkan pengelola proses sistem ini untuk meningkatkan isolasi dan keamanan wadah, itulah alasan kita mendapatkan error setiap kali kita ingin menggunakan perintah systemctl.

Tip- Apa itu Systemd?

Systemd adalah sistem dan manajer sesi ( init system ) yang bertanggung jawab untuk mengelola semua service yang berjalan di sistem selama seluruh waktu pengoperasian komputer, mulai dari proses start-up hingga shutdown. Proses selalu dimulai secara paralel (sejauh mungkin) untuk menjaga proses boot sesingkat mungkin.

Juga, systemd adalah proses pertama yang dipicu dalam sistem Linux, itulah alasan di mana kita menjalankan perintah ps -aux pada terminal Linux mana pun, kita melihat proses pertama (PID 1) dialokasikan ke systemd.

ps -aux

Di sisi lain, ketika Anda menjalankan perintah yang sama di dalam wadah, Anda akan melihat PID (1) yang berarti proses pertama sistem telah dialokasikan ke bash.

Oleh karena itu, inilah alasan Anda akan mendapatkan error setiap kali Anda mencoba memulai beberapa service di dalam wadah Docker menggunakan perintah systemctl.

Instal atau Aktifkan systemd di dalam wadah Almalinux atau Rocky Linux 8 Docker

Buat file Docker

Ada beberapa perintah yang harus kita jalankan sebelum membuat container menggunakan Almalinux atau Rocky. Oleh karena itu alih-alih menjalankannya dalam satu perintah, mari tambahkan mereka dalam file buruh pelabuhan untuk membuat Gambar Docker diaktifkan dengan systemd.

Buat direktori, misalkan ‘ sysmd ‘ :

mkdir sysmd

beralih ke itu:

sistem cd

Buat file buruh pelabuhan:

nano file docker

Perintah untuk dijalankan dalam file Docker untuk mendapatkan Systemd

Sekarang, salin-tempel perintah yang diberikan di file Docker:

Catatan : Ubah almalinux menjadi rockylinux, jika Anda ingin membangun Docker Image untuk menjalankan Rocky Linux.

Perintah yang diberikan dalam file akan menarik Gambar Docker (Almalinux atau Rocky) dan kemudian menjalankan perintah berikut termasuk pemasangan Volume dan perintah yang diperlukan untuk mengaktifkan Systemd. Selain itu, kita akan menghapus beberapa file yang terkait dengan systemd untuk mengaktifkan service lain yang tidak kita perlukan pada wadah Docker command line kita.

DARI almalinux ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in ; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done) ; JALANKAN rm -rf /lib/systemd/system/multi-user.target.wants/ && rm -rf /etc/systemd/system/.wants/ && rm -rf /lib/systemd/system/local-fs. target.wants/ && rm -f /lib/systemd/system/sockets.target.wants/udev && rm -f /lib/systemd/system/sockets.target.wants/initctl && rm -rf /lib/ systemd/system/basic.target.wants/ && rm -f /lib/systemd/system/anaconda.target.wants/* VOLUME [ “/sys/fs/cgroup” ] CMD [“/usr/sbin/init” ]

Simpan file dengan menekan Ctrl+O, tekan tombol Enter, lalu tekan Ctrl+X untuk keluar dari file.

Bangun File Kontainer Docker dengan systemd

Sekarang, kita mengambil dan membangun Gambar Kontainer sambil meneruskan perintah yang diberikan dalam file Docker. Untuk itu, ada perintah yang disebut- docker build dan kita menggunakan yang sama.

buruh pelabuhan membangun -t almalinux-md.

Catatan : Anda dapat mengubah almalinux-md dengan nama apa pun yang ingin Anda berikan pada Gambar Anda. Dan juga jangan lupa untuk menambahkan titik (. ) seperti yang diberikan pada perintah di atas, ini memandu perintah build untuk mencari File Docker di dalam direktori.

Anda dapat melihat bahwa semua perintah yang diberikan dalam file telah dieksekusi oleh docker build untuk membuat gambar baru dengan nama yang telah Anda berikan.

Keluaran:

Mengirim konteks build ke daemon Docker 2.56kB Langkah 1/6 : DARI almalinux —> 4ca63ce1d8a9 Langkah 2/6 : ENV container docker —> Menjalankan di 57d447426e1a Menghapus container perantara 57d447426e1a —> fa30ff65bd36 Langkah 3/6 : RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in ; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); —> Berjalan di bc3b161040e6 Menghapus wadah perantara bc3b161040e6 —> 6f51cf56580e Langkah 4/6 : RUN rm -rf /lib/systemd/system/multi-user.target.wants/ && rm -rf /etc/systemd/system /.wants/ && rm -rf /lib/systemd/system/local-fs.target.wants/ && rm -f /lib/systemd/system/sockets.target.wants/udev && rm -f /lib/systemd/ system/sockets.target.wants/initctl && rm -rf /lib/systemd/system/basic.target.wants/ && rm -f /lib/systemd/system/anaconda.target.wants/* —> Berjalan di 082cfe33fc89 Melepas container perantara 082cfe33fc89 —> 9f8224491315 Langkah 5/6 : VOLUME [ “/sys/fs/cgroup” ] —> Menjalankan fe0177b04643 Menghapus container perantara fe0177b04643 —> 212b1b01046b Langkah 6/6 : CMD [” /usr/sbin/init”] —> Menjalankan di bff7b36d4964 Menghapus wadah perantara bff7b36d4964 —> 9b8dfd7c1d81 Berhasil membuat 9b8dfd7c1d81 Berhasil menandai almalinux-md:latest

Periksa Gambar Almalinux atau Rocky Linux yang dibuat

Sekarang, mari kita periksa apakah Gambar yang telah kita buat di sana untuk memulai wadah atau tidak:

gambar buruh pelabuhan

Buat atau Mulai Docker Container dengan systemd

Kita memiliki Gambar yang baru saja kita buat, mari kita gunakan untuk membuat wadah.

docker run -itd –privileged–name h2smedia almalinux-md

h2smedia adalah nama cantik yang ingin kita berikan ke wadah kita sedangkan almalinux-md adalah nama gambar yang telah kita buat, ganti dengan milik Anda.

Peringatan : Di sini kita menjalankan container dengan flag yang diistimewakan, ini akan memberikan kekuatan ekstra untuk container, dengan kata sederhana- container akan memiliki hak atau root privilege ke engine host. Container seperti ini biasanya kita gunakan ketika ingin memberikan akses hardware secara langsung (dari host) atau ingin menjalankan container di dalam container. Jadi, disarankan untuk tidak menggunakan wadah tersebut untuk useran komersial atau perusahaan di mana user luar mengakses beberapa service. Buat untuk pengembangan atau tujuan lokal saja. Itulah alasan kita menjalankan perintah di atas dengan flag ini sehingga kita dapat memiliki fasilitas Systemd atau init di wadah kita.

Beralih ke Bash Kontainer

Sekarang, mari kita akses command line container untuk memeriksa apakah kita dapat menjalankan perintah systemctl atau tidak.

Sekarang, Anda memiliki Gambar Docker dengan Systemd dan ini akan memungkinkan Anda membuat wadah sebanyak yang Anda inginkan untuk mengembangkan atau menguji aplikasi lokal.

Tutorial lainnya:

• Cara menginstal dan mengatur Docker Container di AlmaLinux 8 • Cara membuat file unit service Systemd di Linux • Menganalisis waktu boot sistem Linux dengan Systemd