Membuat gambar NodeJSDocker khusus di rhel7

Saya sedang membangun beberapa gambar Docker dasar untuk organisasi saya untuk digunakan oleh tim aplikasi ketika mereka menyebarkan aplikasi mereka di OpenShift. Salah satu gambar yang harus saya buat adalah gambar NodeJS (kami ingin gambar kami bersifat internal, bukan bersumber dari DockerHub). Saya sedang membangun RHEL7 Universal Base Image (ubi) RedHat. Namun saya mengalami masalah dalam mengonfigurasi NodeJS agar berfungsi di dalam container. Ini Dockerfile saya:

FROM myimage_rhel7_base:1.0

USER root

RUN INSTALL_PKGS="rh-nodejs10 rh-nodejs10-npm rh-nodejs10-nodejs-nodemon nss_wrapper" && \
    yum install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \
    rpm -V $INSTALL_PKGS && \
    yum clean all

USER myuser

Namun ketika saya menjalankan gambar tidak ada perintah node atau npm yang tersedia kecuali saya menjalankan scl enable rh-nodejs10 bash. Ini tidak berfungsi di Dockerfile karena membuat subkulit yang tidak akan dapat digunakan oleh pengguna yang mengakses container.

Saya telah mencoba menginstal dari sumber, tetapi saya mengalami masalah lain karena perlu memutakhirkan versi gcc/g++ meskipun versi tersebut tidak tersedia di repo yang dikonfigurasi dari organisasi saya. Saya juga berpikir bahwa jika saya dapat membuat NodeJS berfungsi dari manajer paket, itu akan membantu mendapatkan patch keamanan dan paket tersebut harus diperbarui.

Pertanyaan saya, apa saja langkah-langkah yang disarankan untuk membuat image yang dapat digunakan untuk membangun aplikasi yang berjalan di NodeJS?


person willh99    schedule 06.08.2019    source sumber


Jawaban (2)


Mungkin ini adalah kasus dimana kode terbaik adalah kode yang tidak Anda tulis sama sekali. Lihat https://github.com/sclorg/s2i-nodejs-container

Ini adalah proyek yang membuat gambar yang telah menginstal nodejs. Ini mungkin merupakan solusi sempurna, atau bisa juga menjadi contoh bagus tentang apa yang ingin Anda bangun.

Selain itu, readme mereka mencoba menjelaskan cara mereka menyiasati perintah scl aktifkan.

Biasanya, SCL memerlukan operasi manual untuk mengaktifkan koleksi yang ingin Anda gunakan. Hal ini memberatkan dan rawan kesalahan. Pendekatan OpenShift S2I adalah mengatur variabel lingkungan Bash yang berfungsi untuk mengaktifkan koleksi yang diinginkan secara otomatis:

  • BASH_ENV: mengaktifkan pengumpulan untuk semua sesi Bash non-interaktif
  • ENV: mengaktifkan pengumpulan untuk semua pemanggilan /bin/sh
  • PROMPT_COMMAND: mengaktifkan koleksi di shell interaktif

Dua contoh: * Jika Anda menentukan BASH_ENV, maka semua skrip #!/bin/bash Anda tidak perlu memanggil scl enable. * Jika Anda menentukan PROMPT_COMMAND, maka saat perintah podman exec ... /bin/bash dijalankan, koleksi akan diaktifkan secara otomatis.

person Adam Wise    schedule 08.08.2019

Saya akhirnya memutuskan untuk menginstal node menggunakan binari daripada server rpm kami. Berikut implementasinya

FROM myimage_rhel7_base:1.0

USER root

# Get node distribution from nexus and install it
RUN   wget -P /tmp http://myrepo.example.com/repository/node/node-v10.16.3-linux-x64.tar.xz && \
      tar -C /usr/local --strip-components 1 -xf /tmp/node-v10.16.3-linux-x64.tar.xz && \
      rm /tmp/node-v10.16.3-linux-x64.tar.xz


person willh99    schedule 18.09.2019