View a markdown version of this page

Membangun gambar kontainer AL2023 tanpa tulang - Amazon Linux 2023

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membangun gambar kontainer AL2023 tanpa tulang

Gambar wadah AL2023 dibangun dari komponen perangkat lunak yang sama yang disertakan dalam AMI AL2023. Ini termasuk perangkat lunak yang memungkinkan lapisan wadah dasar berperilaku mirip dengan berjalan pada instans Amazon EC2, seperti manajer dnf paket. Bagian ini menjelaskan bagaimana Anda dapat membuat wadah dari awal yang hanya mencakup dependensi minimum yang diperlukan untuk aplikasi.

catatan

Gambar wadah AL2023 standar cocok untuk sebagian besar kasus penggunaan. Menggunakan gambar wadah standar memudahkan untuk membangun di atas gambar Anda. Gambar wadah tanpa tulang membuatnya lebih sulit untuk membangun di atas gambar Anda.

Untuk membuat wadah dengan dependensi minimum untuk aplikasi
  1. Tentukan dependensi runtime Anda. Ini akan bervariasi berdasarkan aplikasi Anda.

  2. BangunDockerfile/Containerfileyang membangunFROM scratch. Contoh berikut dari a Dockerfile dapat digunakan untuk membangun wadah yang hanya berisi bash shell dan dependensinya.

    FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build RUN mkdir /sysroot RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \ --installroot /sysroot \ -y \ --setopt=install_weak_deps=False \ install bash FROM scratch COPY --from=build /sysroot / WORKDIR / ENTRYPOINT ["/bin/bash"]
    1. Ini Dockerfile bekerja oleh:

      1. Memulai wadah AL2023 bernamabuild. Wadah ini akan digunakan untuk mem-bootstrap wadah barebones, wadah ini tidak digunakan sendiri, tetapi menghasilkan wadah yang akan digunakan.

      2. Membuat /sysroot direktori. Direktori ini akan menjadi tempat build wadah akan menginstal dependensi yang diperlukan untuk wadah barebones. Pada langkah selanjutnya, /sysroot jalur akan dikemas menjadi direktori root dari gambar barebones kami.

        Menggunakan --installroot opsi untuk dengan dnf cara ini adalah cara kami membuat gambar AL2023 lainnya. Ini adalah fitur dnf yang memungkinkan penginstal dan alat pembuatan gambar berfungsi.

      3. Memanggil dnf untuk menginstal paket ke/sysroot.

        Per rpm -q system-release --qf '%{VERSION}' intah men -q anyakan () system-release paket, mengatur format kueri (--qf) untuk mencetak versi paket yang ditanyakan (%{VERSION}variabel adalah rpm variabel untuk versi). RPM

        Dengan menyet --releasever el argumen dnf ke versi system-release dalam build wadah, ini Dockerfile dapat digunakan untuk membangun kembali wadah barebones setiap kali gambar basis kontainer Amazon Linux yang diperbarui dirilis.

        Dimungkinkan untuk mengatur ke versi Amazon Linux 2023 apa pun, seperti 2023.12.20260817. --releasever Melakukan ini berarti bahwa build wadah akan berjalan sebagai versi AL2023 terbaru, tetapi buat wadah barebones dari 2023.12.20260817 terlepas dari apa rilis AL2023 saat ini.

        Opsi --setopt=install_weak_deps=False konfigurasi memberitahu dnf untuk hanya menginstal dependensi yang diperlukan daripada direkomendasikan atau disarankan.

      4. Menyalin sistem yang diinstal ke root wadah kosong (FROM scratch).

      5. Mengatur ENTRYPOINT menjadi biner yang diinginkan, dalam hal ini/bin/bash.

  3. Buat direktori kosong dan tambahkan konten contoh di Langkah 2 ke file bernamaDockerfile.

    $ mkdir al2023-barebones-bash-example $ cd al2023-barebones-bash-example $ cat > Dockerfile <<EOF FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build RUN mkdir /sysroot RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \ --installroot /sysroot \ -y \ --setopt=install_weak_deps=False \ install bash && dnf --installroot /sysroot clean all FROM scratch COPY --from=build /sysroot / WORKDIR / ENTRYPOINT ["/bin/bash"] EOF
  4. Bangun wadah dengan menjalankan perintah berikut.

    $ docker build -t al2023-barebones-bash-example
  5. Jalankan wadah menggunakan perintah berikut untuk melihat seberapa minimal wadah bash -only.

    $ docker run -it --rm al2023-barebones-bash-example bash-5.2# rpm bash: rpm: command not found bash-5.2# du -sh /usr/ bash: du: command not found bash-5.2# ls bash: ls: command not found bash-5.2# echo /bin/* /bin/alias /bin/bash /bin/bashbug /bin/bashbug-64 /bin/bg /bin/catchsegv /bin/cd /bin/command /bin/fc /bin/fg /bin/gencat /bin/getconf /bin/getent /bin/getopts /bin/hash /bin/iconv /bin/jobs /bin/ld.so /bin/ldd /bin/locale /bin/localedef /bin/pldd /bin/read /bin/sh /bin/sotruss /bin/sprof /bin/type /bin/tzselect /bin/ulimit /bin/umask /bin/unalias /bin/wait /bin/zdump

Untuk contoh yang lebih praktis, prosedur berikut membangun wadah untuk aplikasi C yang ditampilkanHello World!.

  1. Buat direktori kosong dan tambahkan kode sumber C danDockerfile.

    $ mkdir al2023-barebones-c-hello-world-example $ cd al2023-barebones-c-hello-world-example $ cat > hello-world.c <<EOF #include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; } EOF $ cat > Dockerfile <<EOF FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build COPY hello-world.c / RUN dnf -y install gcc RUN gcc -o hello-world hello-world.c RUN mkdir /sysroot RUN mv hello-world /sysroot/ RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \ --installroot /sysroot \ -y \ --setopt=install_weak_deps=False \ install glibc && dnf --installroot /sysroot clean all FROM scratch COPY --from=build /sysroot / WORKDIR / ENTRYPOINT ["/hello-world"] EOF
  2. Bangun wadah menggunakan perintah berikut.

    $ docker build -t al2023-barebones-c-hello-world-example .
  3. Jalankan wadah menggunakan perintah berikut.

    $ docker run -it --rm al2023-barebones-c-hello-world-example Hello World!