ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] NextJS 배포를 위한 도커 컨테이너화.
    카테고리 없음 2024. 5. 14. 13:53
    728x90

    [Docker] NextJS 배포를 위한 도커 컨테이너화.

     

    먼저 도커란 무엇인가?

    Docker란?

    도커는 컨테이너 기반 가상화 플랫폼이다. 소프트웨어를 컨테이너라는 단위로 패키징하여 빠르게, 어디서든 개발하고 배포할 수 있다. 

     

    도커는 서비스와 운영체제 간의 호환성을 해결하기 위해 등장하였다. 예를 들어 내 개발 환경이 Window이고, 배포 서버 환경이 Linux여서 문제가 발생한다면? 머리 아플 것이다. 도커는 다른 운영체제에서도 같은 환경을 구성할 수 있도록 해주기 때문에 이런 문제를 해결할 수 있다.

     

    도커를 설치하고 원하는 환경을 지정해준다. 도커는 지정된 파일을 보고 파일에 명시된 구성으로 가상의 컨테이너를 형성한다. 한 개의 서버가 여러 개의 컨테이너들을 보유할 수 있고, 이 컨테이너들은 각각 독립적으로 구동된다. 어떤 컨테이너는 자바, 어떤 컨테이너는 파이썬, 어떤 컨테이너는 자바스크립트로 작성할 수 있으며, 트래픽이 많아져 컨테이너의 개수가 부족하면 늘리면 된다. 독립적으로 구동되기 때문이다.

     

    컨테이너를 생성하고 복제할 수 있다.

     

    이 컨테이너를 생성하기 위해 프로그램 실행파일이 필요하다. 실행파일에 대한 모든 환경과 파일들을 묶는 형태를 도커 이미지라고 부른다.

     

    Docker 컨테이너화 방법.

     

    아래 주소에서 Docker를 설치할 수 있다.

    https://docs.docker.com/desktop/install/mac-install/

     

    Install Docker Desktop on Mac

    Install Docker for Mac to get started. This guide covers system requirements, where to download, and instructions on how to install and update.

    docs.docker.com

     

    아래와 같이 명령어를 입력해서 정상적으로 도커가 설치되었는지 확인해 보자.

    도커가 설치되었다면 이미지처럼 버전이 표시된다.

    docker -v
    docker-compose -v

     

     

    Dockerfile 생성.

     

    아래 명령어를 입력하면 어플리케이션용 도커파일이 생성된다.

    touch Dockerfile

     

    아래는 내가 구성한 도커파일의 내용이다.

    FROM node:18-alpine
    
    WORKDIR /app
    
    COPY package.json ./
    
    RUN pnpm install
    
    COPY . .
    
    RUN pnpm build
    
    EXPOSE 3000
    
    CMD ["pnpm", "run", "dev"]

     

    • FROM node:18-alpine <- 컨테이너에 사용할 기본 이미지를 지정한다. 내 경우, Linux 위에 구축된 node 18 버전의 이미지를 사용했다.
    • WORKDIR /app <- 작업 디렉토리의 이름을 명시해 줌으로써 컨테이너와의 충돌을 방지한다.
    • COPY package.json ./ <- package.json의 파일을 /app 컨테이너 내부 디렉터리로 복사한다.
    • RUN pnpm install <- 필요한 의존성들을 컨테이너 내부로 설치한다.
    • COPY . . <- 어플리케이션의 전체 내용을 컨테이너 내부 디렉토리로 복사한다.
    • RUNpnpm build <- nextjs 앱을 빌드한다.
    • EXPOSE3000 <- 컨테이너의 포트를 3000으로 지정한다.
    • CMD ["pnpm", "run", "dev"] <- 컨테이너가 시작될 때 실행할 명령을 의미한다. 내 경우 pnpm을 사용하여 이와 같이 작성하였다.

    .dockerignore 파일을 구성하여 불필요한 것들을 무시할 수 있다.

    node_modules
    
    .next

     

    도커파일을 구성하였다면, 아래 명령어를 실행하여 도커 이미지를 빌드할 수 있다.

    docker build -t image-name .

     

    pnpm 사용자의 경우 이런 오류가 발생한다.

    0.112 /bin/sh: pnpm: not found

    아래 코드를 추가하여 해결해 준다.

    RUN npm install -g pnpm

    nodejs를 사용하면 npm이 기본 패키지 관리자로 제공되기 때문에 npm을 사용하여 pnpm을 설치하면 된다.

     

    컨테이너를 실행하기 위해서는 아래 명령어를 입력한다.

    docker run image-name

     

    그럼 지정했던 포트에서 실행된 결과물을 확인할 수 있다.

     

    도커 데스크톱에서도 아래와 같이 결과물을 확인할 수 있다.

     

    마치며

    도커는 정말 유용하다. 개발 시에도, 배포 시에도. 오늘은 도커로 개발 환경을 어떻게 구축할 수 있는지 알아보았다. 다음에는 어떻게 배포를 할 수 있는지도 알아볼 것이다.

    728x90
Designed by Frorong.