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
-
Tentukan dependensi runtime Anda. Ini akan bervariasi berdasarkan aplikasi Anda.
-
Membangun a
Dockerfile
/Containerfile
yang membangunFROM scratch
. Contoh berikut dari aDockerfile
dapat digunakan untuk membangun sebuah wadah yang hanya berisibash
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"]
-
Ini
Dockerfile
bekerja oleh:-
Memulai kontainer AL2 023 bernama
build
. Wadah ini akan digunakan untuk mem-bootstrap kontainer barebone, wadah ini tidak digunakan sendiri, tetapi menghasilkan wadah yang akan digunakan. -
Membuat
/sysroot
direktori. Direktori ini akan menjadi tempatbuild
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 dengandnf
cara ini adalah bagaimana kita membuat gambar AL2 023 lainnya. Ini adalah fiturdnf
yang memungkinkan penginstal dan perkakas pembuatan gambar berfungsi. -
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 adalahrpm
variabel untuk versi).RPM
Dengan menyetel
--releasever
argumendnf
ke versisystem-release
dalambuild
wadah, iniDockerfile
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 bahwabuild
penampung akan berjalan sebagai versi AL2 023 terbaru, tetapi membangun wadah barebones dari 2023.6.20241010 terlepas dari apa rilis 023 saat ini. AL2Opsi
--setopt=install_weak_deps=False
konfigurasi memberitahudnf
untuk hanya menginstal dependensi yang diperlukan daripada direkomendasikan atau disarankan. -
Menyalin sistem yang diinstal ke root wadah kosong (
FROM scratch
). -
Mengatur
ENTRYPOINT
menjadi 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 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!
.
-
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-example
Hello World!