소개
Docker 멀티 스테이지 빌드(Multi-stage Build)는 Dockerfile 내에서 여러 단계를 사용하여 최종 Docker 이미지를 생성할 수 있게 해주는 기능입니다. 이번 챌린지에서는 멀티 스테이지 빌드를 활용하여 더 작고 효율적인 Docker 이미지를 구성하는 방법을 실습합니다.
멀티 스테이지 빌드를 사용하는 Dockerfile 생성
이 섹션에서는 멀티 스테이지 빌드를 사용하는 Dockerfile을 작성합니다.
작업
- 두 개의 단계를 사용하는 새로운
Dockerfile을 생성하세요. 첫 번째 단계는 필요한 종속성을 설치하고 빌드 스크립트를 실행하여 애플리케이션을 빌드합니다. 두 번째 단계는 첫 번째 단계에서 컴파일된 코드만 복사하고, 프로덕션용 종속성만 설치한 뒤 필요한 포트를 노출하여 최종 이미지를 생성합니다.
예시
다음은 수행할 단계의 예시입니다:
myapp이라는 새 디렉토리를 만들고 해당 디렉토리로 이동합니다.mkdir myapp cd myapphttps://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-examplemyapp디렉토리에 다음 내용을 담은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이라는 이름의 새 이미지를 빌드하세요.
예시
다음은 수행할 작업의 예시입니다:
docker build명령어를 사용하여myapp이라는 새 이미지를 빌드합니다.docker build -t myapp .docker images명령어를 사용하여 이미지가 성공적으로 빌드되었는지 확인합니다.
요구 사항
이 챌린지를 완료하려면 다음 사항이 필요합니다:
/home/labex/project/myapp디렉토리에서docker build명령어를 실행하세요.- 이미지 이름을
myapp으로 지정하세요.
Docker 컨테이너 실행
이 단계에서는 Docker 이미지를 사용하여 컨테이너를 실행합니다.
작업
myapp이미지를 사용하여 컨테이너를 실행하세요. 컨테이너의3000번 포트를 호스트의3030번 포트에 연결하고, 브라우저를 통해 애플리케이션에 접속하세요.
예시
다음은 수행할 작업의 예시입니다:
my-app이라는 이름의 새 Docker 컨테이너를 시작합니다.docker run --name my-app -p 3030:3000 myapp웹 브라우저를 열고
http://localhost:3030으로 이동하여 실행 중인 애플리케이션에 접속합니다.
요구 사항
이 챌린지를 완료하려면 다음 사항이 필요합니다:
- 컨테이너 이름을
my-app으로 설정하여 실행하세요. - 컨테이너 내부의
3000번 포트를 호스트의3030번 포트로 매핑하세요.
요약
이번 챌린지에서는 Docker 멀티 스테이지 빌드를 사용하여 더 작고 효율적인 Docker 이미지를 만드는 방법을 배웠습니다. Dockerfile에서 여러 단계를 사용하면 빌드 환경과 런타임 환경을 분리하여 최종 Docker 이미지의 크기를 줄일 수 있습니다. 이제 이 지식을 바탕으로 멀티 스테이지 빌드를 사용하여 자신만의 Docker 이미지를 직접 빌드해 보세요.



