翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ベアボーン 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.6.20250203 などの
--releasever
任意の Amazon Linux 2023 バージョンに設定することができます。これにより、build
コンテナは最新の AL2023 バージョンとして実行されますが、現在の AL2023 リリースに関係なく、20AL20233.6.20250203 からベアボーンコンテナを構築します。--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-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
より実用的な例として、以下の手順では 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-example
Hello World!