도커 멀티 스테이지 빌드 챌린지

DockerBeginner
지금 연습하기

소개

도커 멀티 스테이지 빌드 (Multi-stage Build) 는 하나의 Dockerfile 내에서 여러 단계를 정의하여 최종 도커 이미지를 생성할 수 있게 해주는 기능입니다. 이번 챌린지에서는 멀티 스테이지 빌드를 활용해 이미지 크기를 최적화하고 효율적인 배포 이미지를 만드는 과정을 실습합니다.

멀티 스테이지 빌드를 적용한 Dockerfile 작성

이 단계에서는 멀티 스테이지 빌드 방식을 사용하는 Dockerfile을 작성합니다.

수행 과제

  • 두 개의 스테이지로 구성된 Dockerfile을 생성하세요. 첫 번째 스테이지에서는 필요한 의존성을 설치하고 빌드 스크립트를 실행하여 애플리케이션을 빌드합니다. 두 번째 스테이지에서는 첫 번째 스테이지에서 컴파일된 코드만 복사해오고, 실행에 필요한 최소한의 의존성만 유지하며 필요한 포트를 개방하여 최종 이미지를 구성합니다.

예시 가이드

다음은 실습 진행을 위한 예시 절차입니다:

  1. myapp이라는 새 디렉토리를 생성하고 해당 위치로 이동합니다.

    mkdir myapp
    cd myapp
    
  2. https://github.com/labex-labs/nodejs-example.git에서 NodeJS 소스 코드를 내려받습니다.

    git clone https://github.com/labex-labs/nodejs-example.git
    

    다운로드한 코드를 myapp 디렉토리 바로 아래로 옮깁니다.

    mv nodejs-example/* .
    rm -rf nodejs-example
    
  3. myapp 디렉토리에 다음과 같은 내용으로 Dockerfile을 생성합니다:

    ## Stage 1: Build the application
    FROM node:14-alpine AS base
    WORKDIR /app
    COPY . ./
    RUN npm install
    
    ## Stage 2: Create the final image
    FROM node:14-alpine
    WORKDIR /app
    COPY --from=base /app/ .
    EXPOSE 3000
    CMD [ "npm", "start" ]
    

요구 사항

챌린지를 완료하려면 다음 조건을 충족해야 합니다:

  • /home/labex/project 경로 아래에 myapp 디렉토리를 생성해야 합니다.
  • myapp 디렉토리 안에 NodeJS 소스 코드를 클론해야 합니다.
  • 지정된 내용이 포함된 Dockerfilemyapp 디렉토리에 작성해야 합니다.

도커 이미지 빌드

이 단계에서는 작성한 Dockerfile을 사용하여 이미지를 빌드합니다.

수행 과제

  • myapp이라는 이름의 새로운 이미지를 빌드하세요.

예시 가이드

다음은 수행해야 할 작업의 예시입니다:

  1. docker build 명령어를 사용하여 myapp이라는 이름의 이미지를 빌드합니다.

    docker build -t myapp .
    
  2. docker images 명령어를 통해 이미지가 성공적으로 생성되었는지 확인합니다.

요구 사항

챌린지를 완료하려면 다음 조건을 충족해야 합니다:

  • /home/labex/project/myapp 디렉토리 내에서 docker build 명령어를 실행해야 합니다.
  • 이미지 이름은 반드시 myapp으로 설정해야 합니다.

도커 컨테이너 실행

이 단계에서는 빌드한 도커 이미지를 사용하여 컨테이너를 실행합니다.

수행 과제

  • myapp 이미지를 사용하여 컨테이너를 실행하세요. 컨테이너 내부의 3000번 포트를 호스트의 3030번 포트로 연결 (포트 포워딩) 한 후, 브라우저에서 애플리케이션에 접속해야 합니다.

예시 가이드

다음은 수행해야 할 작업의 예시입니다:

  1. my-app이라는 이름으로 새 도커 컨테이너를 시작합니다.

    docker run --name my-app -p 3030:3000 myapp
    
  2. 웹 브라우저를 열고 http://localhost:3030으로 접속하여 애플리케이션이 정상 작동하는지 확인합니다.

요구 사항

챌린지를 완료하려면 다음 조건을 충족해야 합니다:

  • 컨테이너 이름을 my-app으로 지정하여 실행해야 합니다.
  • 컨테이너 내부의 3000 포트를 호스트의 3030 포트로 매핑해야 합니다.

요약

이 챌린지에서는 도커 멀티 스테이지 빌드를 사용하여 더 작고 효율적인 도커 이미지를 만드는 방법을 배웠습니다. Dockerfile에서 여러 단계를 활용하면 빌드 환경과 실행 환경을 완벽히 분리할 수 있으며, 결과적으로 최종 이미지의 용량을 획기적으로 줄일 수 있습니다. 이제 이러한 지식을 바탕으로 실제 프로젝트에서도 최적화된 도커 이미지를 직접 구축해 보시기 바랍니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습