Docker로 Node.js 애플리케이션 빌드 및 실행하기: 자세한 설명과 명령어 안내

GoGoComputer·2024년 9월 27일

docker kubernetes study

목록 보기
2/7


1. Docker 이미지 빌드하기

docker build .
  • 설명: 현재 디렉토리에 있는 Dockerfile을 기반으로 Docker 이미지를 생성합니다.
  • 작동 방식:
    • docker build 명령어는 Docker에게 해당 디렉토리(.)에서 Dockerfile을 찾아 그 지침에 따라 이미지를 빌드하도록 지시합니다.
    • 빌드 과정에서는 베이스 이미지 설정, 필요한 패키지 설치, 소스 코드 복사 등의 작업이 이루어집니다.
  • 결과: 새로운 Docker 이미지가 생성되며, 이 이미지는 고유한 이미지 ID를 갖게 됩니다.

2. Docker 컨테이너 실행하기

docker run (ID)
  • 설명: 생성된 Docker 이미지를 기반으로 새로운 컨테이너를 실행합니다.
  • 작동 방식:
    • (ID)는 앞서 빌드된 Docker 이미지의 ID입니다.
    • docker run 명령어는 해당 이미지를 기반으로 컨테이너를 생성하고, 그 안에서 애플리케이션을 실행합니다.
  • 결과: 컨테이너가 생성되고 실행되며, 애플리케이션이 동작하기 시작합니다.

3. 포트 3000에 포트 3000을 게시합니다

  • 설명: 호스트의 포트 3000과 컨테이너의 포트 3000을 연결하여 외부에서 컨테이너 내부의 애플리케이션에 접근할 수 있게 합니다.
  • 사용되는 명령어:
docker run -p 3000:3000 (ID)
  • 작동 방식:
    • -p 3000:3000 옵션은 호스트의 포트 3000을 컨테이너의 포트 3000에 매핑합니다.
    • 이를 통해 브라우저에서 localhost:3000으로 접근하면 컨테이너 내부에서 실행 중인 애플리케이션에 연결됩니다.

4. 실행 중인 컨테이너 목록 확인

docker ps
  • 설명: 현재 실행 중인 모든 Docker 컨테이너의 목록을 보여줍니다.
  • 결과: 컨테이너 ID, 이미지 이름, 생성 시간, 상태, 포트 매핑 정보 등이 표시됩니다.

5. 컨테이너 중지하기

docker stop (name)
  • 설명: 지정한 컨테이너를 중지합니다.
  • 작동 방식:
    • (name)은 컨테이너의 이름 또는 ID입니다.
    • Docker는 해당 컨테이너에 종료 신호를 보내 안전하게 중지시킵니다.
  • 결과: 컨테이너가 중지되어 더 이상 실행되지 않습니다.

6. 모든 컨테이너 목록 확인

docker ps -a
  • 설명: 실행 중인 컨테이너뿐만 아니라 중지된 컨테이너를 포함한 모든 컨테이너의 목록을 보여줍니다.
  • 결과: 컨테이너의 전체 목록을 확인할 수 있으며, 필요에 따라 재시작하거나 삭제할 수 있습니다.

7. 첨부 파일 및 package.json 설명

  • 첨부 파일: nodejs-app-starting-setup.zip
    • Node.js 애플리케이션의 기본 설정 파일들이 포함된 압축 파일입니다.
    • 이 파일을 풀어서 프로젝트 디렉토리에 배치합니다.
  • package.json 확인하기
    • Node.js 프로젝트의 핵심 설정 파일로, 프로젝트의 메타데이터와 의존성 정보가 포함되어 있습니다.
    • 주요 내용:
      • name: 프로젝트 이름
      • version: 프로젝트 버전
      • dependencies: 프로젝트에서 사용하는 패키지 목록
      • scripts: NPM 명령어로 실행할 수 있는 스크립트 정의

8. 써드파티 패키지를 Node.js에 알려주기

  • 설명: package.json에 정의된 의존성 패키지들을 설치하여 애플리케이션이 정상적으로 실행되도록 합니다.
  • 사용되는 명령어:
npm install
  • 작동 방식:
    • npm install 명령어는 package.json 파일을 읽어 dependencies에 명시된 모든 패키지를 설치합니다.
    • 설치된 패키지들은 node_modules 디렉토리에 저장됩니다.
  • 결과: 애플리케이션 실행에 필요한 모든 패키지가 설치되어 준비가 완료됩니다.

9. Docker 이미지 빌드 및 실행

이미지 빌드하기

docker build .
  • 앞서 설명한 대로 Docker 이미지를 생성합니다.

이미지 실행하기

docker run sha256:dd761a8fbb1c7b7c6f1cb87d65ccd8749adff3b3ab064ab9f9583
  • 설명: 해당 이미지 ID를 가진 이미지를 기반으로 컨테이너를 실행합니다.
  • 주의사항: 이미지 ID는 길기 때문에 다음에 설명할 방법으로 간단히 사용할 수 있습니다.

10. 컨테이너 지속 실행 및 종료

  • 컨테이너 실행 유지:
    • 노드 서버는 기본적으로 계속 실행되기 때문에 컨테이너도 지속적으로 실행 상태를 유지합니다.
  • 로컬호스트에서 접속이 안 되는 경우:
    • 포트 매핑이 올바르게 설정되지 않았을 수 있습니다.
    • 컨테이너를 종료하고 포트 매핑을 설정하여 다시 실행해야 합니다.
  • 컨테이너 종료 후 재실행하기:
docker ps
(open new terminal)
docker stop elegant_elgamal
docker ps
docker ps -a
  • 설명:
    • docker ps로 실행 중인 컨테이너를 확인합니다.
    • 새로운 터미널에서 docker stop elegant_elgamal로 컨테이너를 중지합니다.
    • 다시 docker ps로 실행 중인 컨테이너가 없는지 확인합니다.
    • docker ps -a로 모든 컨테이너 목록을 확인합니다.

11. Dockerfile의 EXPOSE 명령어에 대한 이해

  • EXPOSE 80의 의미:
    • 컨테이너 내부에서 애플리케이션이 수신 대기하는 포트를 문서화하는 역할을 합니다.
    • 실제로 포트를 호스트에 노출하지는 않습니다.
  • 실제로 포트를 노출하려면:
    • 컨테이너 실행 시 -p 플래그를 사용하여 포트를 매핑해야 합니다.

12. 컨테이너 실행 시 포트 매핑하기

docker run -p 3000:80 sha256:dd761a8fbb1c7b7c6f1cb87d65ccd8749adff3b3ab064ab9f9583
  • 설명:
    • -p 3000:80 옵션은 호스트의 포트 3000을 컨테이너의 포트 80에 매핑합니다.
    • 이를 통해 외부에서 컨테이너 내부의 애플리케이션에 접근할 수 있습니다.
  • 결과:
    • 브라우저에서 localhost:3000으로 접속하면 컨테이너 내부의 애플리케이션이 표시됩니다.

13. 요약 및 추가 설명

  • EXPOSE는 선택 사항:
    • 포트를 실제로 노출하지 않으므로 docker run-p 옵션이 필요합니다.
    • 하지만 EXPOSE를 Dockerfile에 포함하여 문서화하는 것이 좋습니다.
  • 이미지 ID 사용의 편의성:
    • Docker 명령어에서 이미지나 컨테이너의 ID를 사용할 때 전체를 입력할 필요가 없습니다.
    • 첫 몇 자리만으로도 고유하다면 사용 가능합니다.
    • 예를 들어, 이미지 ID가 abcdefg로 시작한다면:
docker run abcdefg
  • 위 명령 대신 다음과 같이 실행할 수 있습니다:
docker run abc
  • 주의사항:
    • 동일한 시작 문자를 가진 다른 이미지나 컨테이너가 없을 경우에만 가능합니다.

마무리

이렇게 해서 주어진 내용과 명령어들에 대해 자세히 설명해 드렸습니다. 이 설명을 통해 Docker를 사용하여 Node.js 애플리케이션을 빌드하고 실행하는 과정을 이해하시는데 도움이 되었기를 바랍니다. 추가로 궁금한 사항이나 도움이 필요한 부분이 있으시면 언제든지 말씀해 주세요!

profile
IT를 좋아합니다.

0개의 댓글