기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
기본적인 023 컨테이너 이미지 AL2 구축
AL2023 컨테이너 이미지는 023에 포함된 것과 동일한 소프트웨어 구성 요소로 빌드됩니다. AL2 AMI 여기에는 기본 컨테이너 계층이 패키지 관리자와 같은 Amazon EC2 인스턴스에서 실행되는 것과 유사하게 작동하도록 하는 소프트웨어가 포함됩니다dnf
. 이 섹션에서는 애플리케이션에 필요한 최소한의 종속성만 포함하는 컨테이너를 처음부터 구성하는 방법을 설명합니다.
참고
표준 AL2 023 컨테이너 이미지는 대부분의 사용 사례에 적합합니다. 표준 컨테이너 이미지를 사용하면 이미지 위에 쉽게 빌드할 수 있습니다. 기본 컨테이너 이미지는 이미지 위에 구축하기가 더 어렵습니다.
애플리케이션에 대한 종속성을 최소화한 컨테이너를 만들려면
-
런타임 종속 항목을 확인하세요. 이는 애플리케이션에 따라 다릅니다.
-
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
은 다음과 같은 방법으로 실행합니다.-
라는 이름의 AL2 023 컨테이너를 시작합니다.
build
이 컨테이너는 기본 컨테이너를 부트스트랩하는 데 사용되며, 자체 배포되지 않고 배포할 컨테이너를 생성합니다. -
/sysroot
디렉터리 생성 이 디렉터리에서build
컨테이너가 기본 컨테이너에 필요한 종속성을 설치합니다. 다음 단계는/sysroot
경로가 기본 이미지의 루트 디렉터리가 되도록 패키징됩니다.이
dnf
방법으로 to--installroot
옵션을 사용하여 다른 AL2 023 이미지를 만듭니다.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.5.20240730과
--releasever
같은 모든 아마존 리눅스 2023 버전으로 설정할 수 있습니다. 이렇게 하면build
컨테이너는 최신 AL2 023 버전으로 실행되지만 현재 023 릴리스가 무엇이든 상관없이 2023.5.20240730부터 베어본 컨테이너를 빌드하게 됩니다. AL2--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!