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
-
Tentukan dependensi runtime Anda. Ini akan bervariasi berdasarkan aplikasi Anda.
-
Bangun
Dockerfile/Containerfileyang membangunFROM scratch. Contoh berikut dari aDockerfiledapat digunakan untuk membangun wadah yang hanya berisibashshell 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"]-
Ini
Dockerfilebekerja oleh:-
Memulai wadah AL2023 bernama
build. Wadah ini akan digunakan untuk mem-bootstrap wadah barebones, wadah ini tidak digunakan sendiri, tetapi menghasilkan wadah yang akan digunakan. -
Membuat
/sysrootdirektori. Direktori ini akan menjadi tempatbuildwadah akan menginstal dependensi yang diperlukan untuk wadah barebones. Pada langkah selanjutnya,/sysrootjalur akan dikemas menjadi direktori root dari gambar barebones kami.Menggunakan
--installrootopsi untuk dengandnfcara ini adalah cara kami membuat gambar AL2023 lainnya. Ini adalah fiturdnfyang memungkinkan penginstal dan alat pembuatan gambar berfungsi. -
Memanggil
dnfuntuk menginstal paket ke/sysroot.Per
rpm -q system-release --qf '%{VERSION}'intah men-qanyakan ()system-releasepaket, mengatur format kueri (--qf) untuk mencetak versi paket yang ditanyakan (%{VERSION}variabel adalahrpmvariabel untuk versi).RPMDengan menyet
--releaseverel argumendnfke versisystem-releasedalambuildwadah, iniDockerfiledapat 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.
--releaseverMelakukan ini berarti bahwabuildwadah 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=Falsekonfigurasi memberitahudnfuntuk hanya menginstal dependensi yang diperlukan daripada direkomendasikan atau disarankan. -
Menyalin sistem yang diinstal ke root wadah kosong (
FROM scratch). -
Mengatur
ENTRYPOINTmenjadi biner yang diinginkan, dalam hal ini/bin/bash.
-
-
-
Buat direktori kosong dan tambahkan konten contoh di Langkah 2 ke file bernama
Dockerfile.$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 -
Bangun wadah dengan menjalankan perintah berikut.
$docker build -t al2023-barebones-bash-example -
Jalankan wadah menggunakan perintah berikut untuk melihat seberapa minimal wadah
bash-only.$docker run -it --rm al2023-barebones-bash-examplebash-5.2#rpmbash: rpm: command not found bash-5.2#du -sh /usr/bash: du: command not found bash-5.2#lsbash: 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!.
-
Buat direktori kosong dan tambahkan kode sumber C dan
Dockerfile.$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 -
Bangun wadah menggunakan perintah berikut.
$docker build -t al2023-barebones-c-hello-world-example . -
Jalankan wadah menggunakan perintah berikut.
$docker run -it --rm al2023-barebones-c-hello-world-exampleHello World!