GNU/Linux >> Belajar Linux >  >> Rocky Linux

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

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

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

Sebenarnya, sesuai dengan pengembang Docker, yang juga mereka rekomendasikan, seseorang harus menggunakan satu layanan 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 kami temukan di sistem Linux standar mana pun untuk mengelola dan menjalankan beberapa layanan 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 kami mendapatkan kesalahan setiap kali kami ingin menggunakan systemctl perintah.

Kiat- Apa itu Systemd?

Systemd adalah sistem dan manajer sesi (sistem init ) yang bertanggung jawab untuk mengelola semua layanan yang berjalan pada sistem selama seluruh waktu pengoperasian komputer, 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 di sistem Linux, itulah alasan kami menjalankan ps -aux perintah pada terminal Linux mana pun kita melihat proses pertama (PID 1) dialokasikan ke systemd .

ps -aux

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

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

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 dalam file buruh pelabuhan untuk membuat Gambar Docker yang diaktifkan dengan systemd .

Buat direktori, katakanlah ‘sysmd ' :

sistem mkdir

beralih ke sana:

sistem cd

Buat file buruh pelabuhan:

nano Dockerfile

Perintah untuk dijalankan dalam file Docker untuk mendapatkan Systemd

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

Catatan :Ubah almalinux ke rockylinux , jika Anda ingin membuat 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, kami akan menghapus beberapa file yang terkait dengan systemd untuk mengaktifkan layanan lain yang tidak kami perlukan pada wadah Docker baris perintah kami.

DARI almalinux ENV container dockerRUN (cd /lib/systemd/system/sysinit.target.wants/; for i in; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); RUN rm -rf /lib/systemd/system/multi-user.target.wants/ \&&rm -rf /etc/systemd/system/.wants/ \&&rm -rf /lib/systemd/system/local-fs.target. want/ \&&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 tombol, lalu tekan Ctrl+X untuk keluar dari file.

Bangun File Kontainer Docker dengan systemd

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

docker build -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 build perintah 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 Anda berikan.

Keluaran:

Mengirim konteks pembangunan 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 apakah Gambar Almalinux atau Rocky Linux telah 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

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

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

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

Peringatan :Di sini kami menjalankan penampung dengan hak istimewa flag, ini akan memberikan kekuatan ekstra ke container, dengan kata sederhana- container akan memiliki hak atau root privilege ke mesin 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 penggunaan komersial atau perusahaan di mana pengguna luar mengakses beberapa layanan. Buat untuk pengembangan atau tujuan lokal saja. Itulah alasan kami menjalankan perintah di atas dengan flag ini sehingga kami dapat memiliki fasilitas Systemd atau init di wadah kami.

Beralih ke Bash Penampung

Sekarang, mari akses baris perintah container untuk memeriksa apakah kita dapat menjalankan systemctl perintah 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 menyiapkan Docker Container di AlmaLinux 8
• Cara membuat file unit layanan Systemd di Linux
• Menganalisis waktu boot sistem Linux dengan Systemd


Rocky Linux
  1. AlmaLinux vs Rocky Linux

  2. Cara Instal Docker di AlmaLinux / Rocky Linux

  3. Bisakah buruh pelabuhan berjalan di dalam Wadah Linux?

  1. Cara Menggunakan Perintah Docker Run dengan Contoh

  2. Cara Mengelola Layanan Systemd dengan Systemctl di Linux

  3. Cara menginstal dan mengatur Docker Container di Rocky Linux 8

  1. Cara Menjalankan Jenkins Container sebagai Layanan Systemd dengan Docker

  2. Cara Instal Docker di Rocky Linux 8 / CentOS 8 / RHEL 8 / AlmaLinux

  3. Instal dan Jalankan Jenkins dengan Systemd dan Docker