기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
기본 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)하고 쿼리 형식(--qf)을 설정하여 쿼리되는 패키지 버전(%{VERSION}변수는RPM버전의rpm변수)을 출력합니다.build컨테이너에서system-release버전의--releasever인수를dnf로 설정하면 업데이트된 Amazon Linux 컨테이너 기본 이미지가 릴리스될 때마다Dockerfile을 사용하여 기본 컨테이너를 다시 빌드할 수 있습니다.를 2023.9.20251117과 같은
--releaseverAmazon Linux 2023 버전으로 설정할 수 있습니다. 이렇게 하면build컨테이너가 최신 AL2023 버전으로 실행되지만 현재 AL2023 릴리스와 관계없이 AL20233.9.20251117에서 베어본 컨테이너를 빌드합니다.--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!