Membangun gambar kontainer AL2 023 yang telanjang - 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 AL2 023 yang telanjang

Gambar kontainer AL2 023 dibangun dari komponen perangkat lunak yang sama yang termasuk dalam AL2 023AMI. Ini mencakup perangkat lunak yang memungkinkan lapisan wadah dasar berperilaku serupa dengan berjalan pada EC2 instance Amazon, seperti manajer paketdnf. Bagian ini menjelaskan bagaimana Anda dapat membuat kontainer dari awal yang hanya mencakup dependensi minimum yang diperlukan untuk aplikasi.

catatan

Gambar kontainer AL2 023 standar cocok untuk sebagian besar kasus penggunaan. Menggunakan gambar kontainer standar membuatnya mudah untuk membangun di atas gambar Anda. Gambar kontainer tanpa tulang membuatnya lebih sulit untuk dibangun di atas gambar Anda.

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

  2. Membangun aDockerfile/Containerfileyang membangunFROM scratch. Contoh berikut dari a Dockerfile dapat digunakan untuk membangun sebuah 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 kontainer AL2 023 bernamabuild. Wadah ini akan digunakan untuk mem-bootstrap kontainer barebone, 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 berikutnya, /sysroot jalur akan dikemas menjadi direktori root dari gambar barebone kami.

        Menggunakan --installroot opsi untuk dengan dnf cara ini adalah bagaimana kita membuat gambar AL2 023 lainnya. Ini adalah fitur dnf yang memungkinkan penginstal dan perkakas pembuatan gambar berfungsi.

      3. Memohon dnf untuk menginstal paket ke dalam/sysroot.

        rpm -q system-release --qf '%{VERSION}'Perintah query (-q) system-release paket, mengatur format query (--qf) untuk mencetak versi paket yang ditanyakan (%{VERSION}variabel adalah rpm variabel untuk versi). RPM

        Dengan menyetel --releasever argumen dnf ke versi system-release dalam build wadah, ini Dockerfile dapat digunakan untuk membangun kembali wadah barebone setiap kali gambar dasar kontainer yang diperbarui dari Amazon Linux dirilis.

        Dimungkinkan untuk mengatur ke versi Amazon Linux 2023 apa pun, seperti 2023.6.20241010. --releasever Melakukan ini berarti bahwa build penampung akan berjalan sebagai versi AL2 023 terbaru, tetapi membangun wadah barebones dari 2023.6.20241010 terlepas dari apa rilis 023 saat ini. AL2

        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 container menggunakan perintah berikut untuk melihat seberapa minimal container 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!