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
/Containerfile
que constróiFROM scratch
. O exemplo a seguir deDockerfile
pode ser usado para criar um contêiner que contém somentebash
shell 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
Dockerfile
funciona 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êinerbuild
instalará as dependências necessárias para o contêiner de barebones. Em uma etapa subsequente, o/sysroot
caminho será empacotado para ser o diretório raiz de nossa imagem básica.Usar a
--installroot
opção dessadnf
maneira é como criamos as outras AL2 023 imagens. Trata-se de um recurso dednf
que permite que instaladores e ferramentas de criação de imagens funcionem. -
Invocar
dnf
para 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ávelrpm
da versão doRPM
).Ao definir o argumento
--releasever
dednf
para a versão desystem-release
no contêinerbuild
, oDockerfile
pode 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
--releasever
para qualquer versão do Amazon Linux 2023, como 2023.6.20250203. Isso significaria que obuild
contêiner seria executado como a versão AL2 023 mais recente, mas construiria o contêiner básico a partir de 2023.6.20250203, independentemente de qual fosse a versão 023 atual. AL2A opção
--setopt=install_weak_deps=False
de configuração dizdnf
para 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
ENTRYPOINT
o 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-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
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-example
Hello World!