Docker 멀티 스테이지 빌드 챌린지

DockerIntermediate
지금 연습하기

소개

Docker 멀티 스테이지 빌드(Multi-stage Build)는 Dockerfile 내에서 여러 단계를 사용하여 최종 Docker 이미지를 생성할 수 있게 해주는 기능입니다. 이번 챌린지에서는 멀티 스테이지 빌드를 활용하여 더 작고 효율적인 Docker 이미지를 구성하는 방법을 실습합니다.

멀티 스테이지 빌드를 사용하는 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이라는 디렉토리를 생성하세요.
  • NodeJS 소스 코드를 myapp 디렉토리로 복제하세요.
  • myapp 디렉토리에 지정된 내용으로 Dockerfile을 생성하세요.

Docker 이미지 빌드

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

작업

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

예시

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

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

    docker build -t myapp .
    
  2. docker images 명령어를 사용하여 이미지가 성공적으로 빌드되었는지 확인합니다.

요구 사항

이 챌린지를 완료하려면 다음 사항이 필요합니다:

  • /home/labex/project/myapp 디렉토리에서 docker build 명령어를 실행하세요.
  • 이미지 이름을 myapp으로 지정하세요.

Docker 컨테이너 실행

이 단계에서는 Docker 이미지를 사용하여 컨테이너를 실행합니다.

작업

  • myapp 이미지를 사용하여 컨테이너를 실행하세요. 컨테이너의 3000번 포트를 호스트의 3030번 포트에 연결하고, 브라우저를 통해 애플리케이션에 접속하세요.

예시

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

  1. my-app이라는 이름의 새 Docker 컨테이너를 시작합니다.

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

요구 사항

이 챌린지를 완료하려면 다음 사항이 필요합니다:

  • 컨테이너 이름을 my-app으로 설정하여 실행하세요.
  • 컨테이너 내부의 3000번 포트를 호스트의 3030번 포트로 매핑하세요.

요약

이번 챌린지에서는 Docker 멀티 스테이지 빌드를 사용하여 더 작고 효율적인 Docker 이미지를 만드는 방법을 배웠습니다. Dockerfile에서 여러 단계를 사용하면 빌드 환경과 런타임 환경을 분리하여 최종 Docker 이미지의 크기를 줄일 수 있습니다. 이제 이 지식을 바탕으로 멀티 스테이지 빌드를 사용하여 자신만의 Docker 이미지를 직접 빌드해 보세요.

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