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 AL2 semplici
L'immagine del contenitore AL2 023 è creata con gli stessi componenti software inclusi in 023. AL2 AMI Include un software che consente al livello di contenitore di base di comportarsi in modo simile all'esecuzione su un'EC2istanza 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
/Containerfile
che consenta di sviluppareFROM scratch
. Il seguente esempio diDockerfile
può essere usato per creare un container che include solo la shellbash
e 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
Dockerfile
funziona tramite:-
Avvio di un contenitore AL2 023 denominato.
build
Questo 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 containerbuild
installa le dipendenze necessarie per il container essenziale. In un passaggio successivo, il percorso/sysroot
viene impacchettato per diventare la directory principale dell'immagine essenziale.L'uso dell'
--installroot
opzione todnf
in questo modo è il modo in cui creiamo le altre immagini AL2 023. Si tratta di una funzionalità didnf
che consente il funzionamento dei programmi di installazione e degli strumenti per la creazione di immagini. -
Richiamo di
dnf
per 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 variabilerpm
per la versione diRPM
).Impostando l'argomento
--releasever
didnf
sulla versione disystem-release
nel containerbuild
, ilDockerfile
può 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,
--releasever
ad esempio 2023.6.20241010. Ciò significherebbe che ilbuild
contenitore funzionerebbe come l'ultima versione AL2 023, ma creerebbe il contenitore barebones a partire dalla versione 2023.6.20241010 indipendentemente dalla versione 023 corrente. AL2L'opzione di configurazione
--setopt=install_weak_deps=False
istruiscednf
affinché 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
ENTRYPOINT
come 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-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
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-example
Hello World!