기본적인 AL2023 컨테이너 이미지 구축 - Amazon Linux 2023

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기본적인 AL2023 컨테이너 이미지 구축

AL2023 컨테이너 이미지는 AL2023 AMI에 포함된 것과 동일한 소프트웨어 구성 요소로 구축됩니다. 여기에는 기본 컨테이너 계층이 패키지 관리자와 같은 Amazon EC2 인스턴스에서 실행되는 것과 유사하게 작동하도록 하는 소프트웨어가 포함됩니다. dnf 이 섹션에서는 애플리케이션에 필요한 최소한의 종속성만 포함하는 컨테이너를 처음부터 구성하는 방법을 설명합니다.

참고

표준 AL2023 컨테이너 이미지는 대부분의 사용 사례에 적합합니다. 표준 컨테이너 이미지를 사용하면 이미지 위에 쉽게 빌드할 수 있습니다. 기본 컨테이너 이미지는 이미지 위에 구축하기가 더 어렵습니다.

애플리케이션에 대한 종속성을 최소화한 컨테이너를 만들려면
  1. 런타임 종속 항목을 확인하세요. 이는 애플리케이션에 따라 다릅니다.

  2. 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"]
    1. Dockerfile은 다음과 같은 방법으로 실행합니다.

      1. build라는 이름의 AL2023 컨테이너를 실행합니다. 이 컨테이너는 기본 컨테이너를 부트스트랩하는 데 사용되며, 자체 배포되지 않고 배포할 컨테이너를 생성합니다.

      2. /sysroot 디렉터리 생성 이 디렉터리에서 build 컨테이너가 기본 컨테이너에 필요한 종속성을 설치합니다. 다음 단계는 /sysroot 경로가 기본 이미지의 루트 디렉터리가 되도록 패키징됩니다.

        이 방식으로 --installroot 옵션을 dnf로 사용하면 다른 AL2023 이미지가 만들어집니다. dnf 기능으로 설치 프로그램과 이미지 생성 도구를 사용할 수 있습니다.

      3. dnf를 호출하여 /sysroot에 패키지를 설치합니다.

        rpm -q system-release --qf '%{VERSION}' 명령은 system-release 패키지를 쿼리(-q)하고 쿼리 형식(--qf)을 설정하여 쿼리되는 패키지 버전(%{VERSION} 변수는 RPM 버전의 rpm 변수)을 출력합니다.

        build 컨테이너에서 system-release 버전의 --releasever 인수를 dnf로 설정하면 업데이트된 Amazon Linux 컨테이너 기본 이미지가 릴리스될 때마다 Dockerfile을 사용하여 기본 컨테이너를 다시 빌드할 수 있습니다.

        --releasever2023.3.20240219와 같은 모든 아마존 리눅스 2023 버전으로 설정할 수 있습니다. 이렇게 하면 build 컨테이너는 최신 AL2023 버전으로 실행되지만 현재 AL2023 릴리스가 무엇이든 상관없이 2023.3.20240219부터 베어본 컨테이너를 빌드하게 됩니다.

        --setopt=install_weak_deps=False 구성 옵션으로 권장하거나 권장되는 종속성이 아닌 필수 종속성만 dnf에 설치할 수 있습니다.

      4. 설치된 시스템을 빈 (FROM scratch) 컨테이너의 루트에 복사합니다.

      5. /bin/bash 경우 ENTRYPOINT를 원하는 바이너리로 설정합니다.

  3. 빈 디렉터리를 만들고 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
  4. 다음 명령을 실행하여 컨테이너를 빌드합니다.

    $ docker build -t al2023-barebones-bash-example
  5. 다음 명령으로 컨테이너를 실행하면 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 응용 프로그램 컨테이너를 빌드합니다.

  1. 빈 디렉터리를 만들고 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
  2. 다음 명령을 실행하여 컨테이너를 빌드합니다.

    $ docker build -t al2023-barebones-c-hello-world-example .
  3. 다음 명령을 실행하여 컨테이너를 실행합니다.

    $ docker run -it --rm al2023-barebones-c-hello-world-example Hello World!