As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criando imagens básicas de contêineres 023 AL2
A imagem do contêiner AL2 023 é criada a partir dos mesmos componentes de software incluídos na AL2 AMI 023. Ele inclui um software que permite que a camada básica do contêiner se comporte de forma semelhante à execução em uma EC2 instância da Amazon, como o gerenciador de pacotesdnf. Esta seção explica como você pode construir um contêiner do zero que inclua somente as dependências mínimas necessárias para um aplicativo.
nota
As imagens padrão do contêiner AL2 023 são adequadas para a maioria dos casos de uso. O uso da imagem de contêiner padrão facilita a criação em cima da imagem. Uma imagem de contêiner básica dificulta a criação sobre sua imagem.
Para criar um contêiner com dependências mínimas para um aplicativo
-
Determine suas dependências de tempo de execução. Isso variará de acordo com sua inscrição.
-
Construa um
Dockerfile/Containerfileque constróiFROM scratch. O exemplo a seguir deDockerfilepode ser usado para criar um contêiner que contém somentebashshell e suas dependências.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"]-
Este
Dockerfilefunciona ao:-
Iniciando um contêiner AL2 023 chamado
build. Esse contêiner será usado para inicializar o contêiner básico. Esse contêiner não é implantado sozinho, mas gera o contêiner a ser implantado. -
Criar o diretório
/sysroot. Esse diretório será onde o contêinerbuildinstalará as dependências necessárias para o contêiner de barebones. Em uma etapa subsequente, o/sysrootcaminho será empacotado para ser o diretório raiz de nossa imagem básica.Usar a
--installrootopção dessadnfmaneira é como criamos as outras AL2 023 imagens. Trata-se de um recurso dednfque permite que instaladores e ferramentas de criação de imagens funcionem. -
Invocar
dnfpara instalar pacotes em/sysroot.O comando
rpm -q system-release --qf '%{VERSION}'consulta (-q) o pacote%{VERSION}, definindo o formato da consulta (--qf) para imprimir a versão do pacote que está sendo consultado (a variávelsystem-releaseé a variávelrpmda versão doRPM).Ao definir o argumento
--releaseverdednfpara a versão desystem-releaseno contêinerbuild, oDockerfilepode ser usado para reconstruir o contêiner básico sempre que uma imagem base de contêiner atualizada do Amazon Linux for lançada.É possível definir o
--releaseverpara qualquer versão do Amazon Linux 2023, como 2023.9.20250929. Isso significaria que obuildcontêiner seria executado como a versão AL2 023 mais recente, mas construiria o contêiner básico a partir de 2023.9.20250929, independentemente de qual fosse a versão 023 atual. AL2A opção
--setopt=install_weak_deps=Falsede configuração dizdnfpara instalar somente as dependências necessárias, em vez de recomendadas ou sugeridas. -
Copiar o sistema instalado na raiz de um contêiner vazio (
FROM scratch). -
Definindo
ENTRYPOINTo como o binário desejado, neste caso/bin/bash.
-
-
-
Crie um diretório vazio e adicione o conteúdo do exemplo na Etapa 2 a um arquivo chamado
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 -
Crie o contêiner executando o comando a seguir.
$docker build -t al2023-barebones-bash-example -
Execute o contêiner usando o comando a seguir para ver o quão mínimo é um contêiner de somente
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
Para um exemplo mais prático, o procedimento a seguir cria um contêiner para um aplicativo C que exibe Hello World!.
-
Crie um diretório vazio e adicione o código-fonte 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 -
Execute o contêiner usando o seguinte comando.
$docker build -t al2023-barebones-c-hello-world-example . -
Execute o contêiner usando o seguinte comando.
$docker run -it --rm al2023-barebones-c-hello-world-exampleHello World!