[21, 22] 우리의 목표 : NodeJS 앱

    728x90
    반응형

     

    [ 우리의 목표 : NodeJS 앱 ]

    Dockerfile로 커스텀 도커 이미지 만들기

     

     

    Dockerfile 기본 구조와 명령어 설명

    Doickfile 생성

    • 이 파일에는 자체 이미지를 빌드할 때 실행하려는 도커에 대한 명령이 포함
    • 따라서 자체 이미지에 대한 설정 명령이 포함

     

    FROM 명령어

    •  node라는 이름의 이미지가 존재하며, 이를 찾을 수 있다는것을 의미
    • 베이스 이미지 지정
    • 예: FROM node
    • 이미 만들어진 이미지를 기반으로 새 이미지 생성

     

    WORKDIR 명령어

    • 컨테이너 내부의 작업 디렉토리 설정
    • 예: WORKDIR /app
    • 이후 모든 명령어는 이 디렉토리 기준으로 실행

     

     

     

    COPY 명령어

    • 로컬 파일을 컨테이너로 복사
    • 문법: COPY [로컬경로] [컨테이너경로]
    • 예: COPY . /app 또는 COPY . ./
    • COPY . . 에서 첫번째 점은 현재 플젝에서 도커파일제외하고 모든파일을 복사해야한다고 도커에게 알림. 두번째 점은 그 파일을 저장해야하는 이미지 내부의 경로
    • COPY . /app 는 독파일과 동일한 폴더에 있는 모든 파일과 모든 하위 폴더가 컨테이너 내부의 app 폴더에 복사.
      이 폴더가 존재하지 않는 경우에는 이미지와 컨테이너에 생성된다.

     

     

    RUN 명령어

    • 이미지 빌드 시 실행할 명령어
    • 예: RUN npm install
    • 이미지 생성 과정에서 실행됨
    • 이미지가 빌드될때마다 실행되기때문에 RUN node server.js는 올바르지 않은 명령어

     

     

    CMD 명령어

    • 이미지가 생성될때 실행되지 않고, 이미지를 기반으로 컨테이너가 시작될때 실행되다는 점에서
      RUN과 다르다.
    • 이미지를 실행하는 것이 아니라, 이미지를 기반으로 컨테이너를 실행하는 것.
      이미지를 기반으로 컨테이너를 시작하는 경우에만 서버를 시작하고 싶어
    • 컨테이너 시작 시 실행할 명령어
    • 예: CMD ["node", "server.js"]
    • RUN과 다르게 컨테이너 실행 시점에 동작
    • CMD에 특정하지 않으면 베이스 이미지가 실행되며, 그게 없는 경우 에러 발생

     

     

    EXPOSE 명령어

    • 컨테이너가 열어둘 포트 지정
    • 예: EXPOSE 80
    • 컨테이너와 로컬 환경 간의 통신을 위해 필요
    • 컨테이너 자체 내부 네트워크가 있어서 컨테이너는 그 포트를 우리의 로컬 머신에 노출하진 않는다

     

     

    FROM node
    WORKDIR /app
    COPY . /app
    RUN npm install
    EXPOSE 80
    CMD ["node", "server.js"]

     

     

    주요 특징과 주의사항

    격리된 환경

    • 컨테이너는 독립된 파일 시스템 보유
    • 호스트 시스템과 분리된 환경

     

    작업 순서 중요

    • WORKDIR 설정 후 다른 명령어 실행
    • 의존성 설치 전 필요한 파일 복사

     

    RUN vs CMD

    • RUN: 이미지 빌드 시 실행
    • CMD: 컨테이너 시작 시 실행

     

    포트 설정

    • EXPOSE로 포트 노출 필요
    • 컨테이너의 내부 네트워크와 로컬 환경 연결

    이렇게 설정된 Dockerfile로 이미지를 빌드하고, 이를 기반으로 컨테이너를 실행할 수 있습니다.

     

     

     

     

    참조

    https://www.udemy.com/course/docker-kubernetes-2022

     

    728x90
    반응형

    댓글