翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ベアボーン AL2023 コンテナイメージの構築
AL2023 コンテナイメージは、AL2023 AMI に含まれているのと同じソフトウェアコンポーネントから構築されています。これには、パッケージマネージャー などの Amazon EC2 インスタンスで実行する場合と同様に、ベースコンテナレイヤーの動作を可能にするソフトウェアが含まれていますdnf。このセクションでは、アプリケーションに必要な最小限の依存関係のみを含むコンテナをゼロから構築する方法について説明します。
注記
標準の AL2023 コンテナイメージは、ほとんどのユースケースに適しています。標準のコンテナイメージを使用すると、イメージ上に簡単に構築できます。ベアボーンコンテナイメージを使用すると、イメージ上に構築するのが難しくなります。
アプリケーションの依存関係を最低限に抑えたコンテナを作成する方法
-
ランタイム依存関係を決定します。これはアプリケーションによって異なります。
-
FROM scratchをビルドするDockerfileまたはContainerfileを作成します。次のDockerfileの例では、bashシェルとその依存関係のみを含むコンテナを構築できます。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"]-
この
Dockerfileは以下のように機能します。-
buildという名前の AL2023 コンテナを起動します。このコンテナはべアボーンコンテナのブートストラップに使用されます。このコンテナ自体はデプロイされませんが、デプロイするコンテナが生成されます。 -
/sysrootディレクトリを作成します。このディレクトリは、buildコンテナがべアボーンコンテナに必要な依存関係をインストールする場所になります。以降のステップでは、/sysrootパスはベアボーンイメージのルートディレクトリとなるようにパッケージ化されます。この
--installrootオプションをこのようにdnfに使用して、他の AL2023 イメージを作成します。これは、インストーラーとイメージ作成ツールを動作させるdnfの機能です。 -
dnfを呼び出して、/sysrootにパッケージをインストールします。rpm -q system-release --qf '%{VERSION}'コマンドはsystem-releaseパッケージをクエリ (-q) し、クエリ対象のパッケージのバージョン (%{VERSION}変数はRPMのバージョンに対応するrpm変数) を出力するようにクエリ形式 (--qf) を設定します。dnfの--releasever引数をbuildコンテナ内のsystem-releaseバージョンに設定すると、Amazon Linux の更新されたコンテナベースイメージがリリースされるたびに、このDockerfileを使用してベアボーンコンテナを再構築できます。を 2023.8.20250908 などの
--releasever任意の Amazon Linux 2023 バージョンに設定することができます。これにより、buildコンテナは最新の AL2023 バージョンとして実行されますが、現在の AL2023 リリースに関係なく、20AL20233.8.20250908 からベアボーンコンテナを構築します。--setopt=install_weak_deps=False設定オプションでは、推奨や提案ではなく、必要な依存関係のみをインストールするようにdnfに指示します。 -
インストールしたシステムを空の (
FROM scratch) コンテナのルートにコピーします。 -
この
/bin/bashの場合は、ENTRYPOINTを目的のバイナリに設定します。
-
-
-
空のディレクトリを作成し、ステップ 2 の例の内容を
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 -
次のコマンドを実行してコンテナを構築します。
$docker build -t al2023-barebones-bash-example -
以下のコマンドを使用してコンテナを実行し、
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
より実用的な例として、以下の手順では Hello World! を表示する C アプリケーション用のコンテナを構築します。
-
空のディレクトリを作成し、C ソースコードおよび
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 -
以下のコマンドを使用して、コンテナを構築します。
$docker build -t al2023-barebones-c-hello-world-example . -
以下のコマンドを実行して、コンテナを起動します。
$docker run -it --rm al2023-barebones-c-hello-world-exampleHello World!