Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Creazione di 023 immagini di contenitori semplici AL2
L'immagine del contenitore AL2 023 è creata con gli stessi componenti software inclusi nell' AL2AMI 023. Include un software che consente al livello di contenitore di base di comportarsi in modo simile all'esecuzione su un' EC2 istanza Amazon, come il gestore dnf di pacchetti. Questa sezione spiega come costruire da zero un contenitore che includa solo le dipendenze minime necessarie per un'applicazione.
Nota
Le immagini standard del contenitore AL2 023 sono adatte alla maggior parte dei casi d'uso. L'uso dell'immagine di container standard semplifica la creazione sulla base dell'immagine. Un'immagine contenitore semplice rende più difficile la creazione sulla base dell'immagine.
Per creare un container con dipendenze minime essenziali per un'applicazione
-
Determina le dipendenze di runtime. Questo aspetto varia a seconda dell'applicazione.
-
Crea un
Dockerfile/Containerfileche consenta di sviluppareFROM scratch. Il seguente esempio diDockerfilepuò essere usato per creare un container che include solo la shellbashe le relative dipendenze.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"]-
Questo
Dockerfilefunziona tramite:-
Avvio di un contenitore AL2 023 denominato.
buildQuesto container viene utilizzato per il bootstrap dei container essenziali; non viene implementato, ma genera il container da implementare. -
Creazione della directory
/sysroot. In questa directory il containerbuildinstalla le dipendenze necessarie per il container essenziale. In un passaggio successivo, il percorso/sysrootviene impacchettato per diventare la directory principale dell'immagine essenziale.L'uso dell'
--installrootopzione todnfin questo modo è il modo in cui creiamo le altre immagini AL2 023. Si tratta di una funzionalità didnfche consente il funzionamento dei programmi di installazione e degli strumenti per la creazione di immagini. -
Richiamo di
dnfper installare pacchetti in/sysroot.Il comando
rpm -q system-release --qf '%{VERSION}'interroga (-q) il pacchettosystem-release, impostando il formato della query (--qf) per stampare la versione del pacchetto sottoposta a query (la variabile%{VERSION}è la variabilerpmper la versione diRPM).Impostando l'argomento
--releaseverdidnfsulla versione disystem-releasenel containerbuild, ilDockerfilepuò essere utilizzato per creare nuovamente il container essenziali ogni volta che viene rilasciata un'immagine di container di base aggiornata di Amazon Linux.È possibile impostarlo su qualsiasi versione di Amazon Linux 2023,
--releaseverad esempio 2023.8.20250908. Ciò significherebbe che ilbuildcontenitore funzionerebbe come l'ultima versione AL2 023, ma creerebbe il contenitore barebones dalla versione 2023.8.20250908 indipendentemente dalla versione 023 corrente. AL2L'opzione di configurazione
--setopt=install_weak_deps=Falseistruiscednfaffinché installi solo le dipendenze che sono richieste, anziché quelle consigliate o suggerite. -
Copia del sistema installato nella directory principale di un container vuoto (
FROM scratch). -
Impostazione di
ENTRYPOINTcome binario desiderato, in questo caso/bin/bash.
-
-
-
Crea una directory vuota e aggiungi il contenuto dell'esempio riportato nel passaggio 2 a un file denominato
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 -
Crea il container eseguendo il comando seguente.
$docker build -t al2023-barebones-bash-example -
Esegui il container usando il comando seguente per capire quanto è minimo un container solo
bash.$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
Per un esempio più pratico, la procedura seguente consente di creare un container per un'applicazione C che visualizza Hello World!.
-
Crea una directory vuota, quindi aggiungi il codice sorgente C e
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 -
Avvia il container utilizzando il comando seguente.
$docker build -t al2023-barebones-c-hello-world-example . -
Esegui il container utilizzando il comando seguente.
$docker run -it --rm al2023-barebones-c-hello-world-exampleHello World!