개인 로컬 환경의 영향을 받지않고 빠르고 간편하게 실행할 수 있도록 Dockerfile을 작성합니다.
Docker를 사용하면 애플리케이션을 인프라에서 분리하여 소프트웨어를 신속하게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드 전달, 테스트 및 배포를 위한 Docker의 방법론을 활용하면 코드 작성과 프로덕션 환경 실행 사이의 지연 시간을 크게 줄일 수 있습니다.
먼저 Docker 이미지를 생성하고, 생성된 이미지를 컨테이너로 빌드하고 실행합니다.
컨테이너는 해당 호스트 시스템에서 실행되는 다른 모든 프로세스와 격리된 호스트 시스템에서 실행되는 샌드박스 프로세스입니다. 이러한 격리는 오랫동안 Linux에 있었던 기능인 커널 네임스페이스와 cgroup을 활용합니다. Docker는 이러한 기능을 접근하기 쉽고 사용하기 쉽게 만듭니다. 요약하자면, 컨테이너는 다음을 수행합니다.
실행 중인 컨테이너는 격리된 파일 시스템을 사용합니다. 이 격리된 파일 시스템은 이미지에 의해 제공되며 이미지에는 애플리케이션을 실행하는 데 필요한 모든 것(모든 종속성, 구성, 스크립트, 바이너리 등)이 포함되어야 합니다. 또한 이미지에는 환경 변수, 기본 명령과 같은 컨테이너에 대한 다른 구성도 포함되어 있습니다.
프로젝트에 대한 Docker 관련 시작 파일을 생성합니다.
docker init
프로젝트 초기화를 실행하면, 4개의 기본 파일이 생성됩니다.
프로젝트 내용에 맞게 수정합니다.
ARG NODE_VERSION=20.12.2
################################################################################
# Use node image for base image for all stages.
FROM node:${NODE_VERSION}-alpine as base
# Set working directory for all build stages.
WORKDIR /app
# Expose the port that the application listens on.
EXPOSE 3001
################################################################################
# Create a stage for installing production dependecies.
FROM base as dev
COPY ./package.json ./
RUN npm install
COPY . /app/
CMD ["npm", "run", "dev"]
docker build . -t eth-dapp
docker run -it -p 3001:3001 eht-dapp
Reference
https://docs.docker.com/guides/