기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
베어 본 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
은 다음과 같은 방법으로 실행합니다.-
라는 AL2023 컨테이너를 시작합니다
build
. 이 컨테이너는 기본 컨테이너를 부트스트랩하는 데 사용되며, 자체 배포되지 않고 배포할 컨테이너를 생성합니다. -
/sysroot
디렉터리 생성 이 디렉터리에서build
컨테이너가 기본 컨테이너에 필요한 종속성을 설치합니다. 다음 단계는/sysroot
경로가 기본 이미지의 루트 디렉터리가 되도록 패키징됩니다.dnf
이러한 방식으로에--installroot
옵션을 사용하면 다른 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.6.20241212과 같은
--releasever
Amazon Linux 2023 버전으로 설정할 수 있습니다. 이렇게 하면build
컨테이너가 최신 AL2023 버전으로 실행되지만 현재 02AL23 릴리스와 관계없이 2023.6.20241212에서 바레본 컨테이너를 빌드합니다.--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!