sugang
sugang'study
sugang
전체 방문자
오늘
어제
  • 분류 전체보기
    • [OS]
    • [취업정보]
    • [Server]
    • [Algorithm]
    • [Database]
    • [MyTravel]
    • [Network]

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • n

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sugang

sugang'study

[server] Docker 로 Node.JS  & Nginx개발환경 구축
[Server]

[server] Docker 로 Node.JS & Nginx개발환경 구축

2022. 7. 3. 13:59

    Node 설정 

     1. Docker 에서 노드 이미지 받기

    mac % docker pull node:14.16.1

    node:14.16.1 

    - LTS 버전, '이미지이름':'tag(버전정보)'

    2. 도커 이미지 실행

    Node 이미지를 실행하기 전에, 로컬로 가져온 이미지를 확인

    mac~ % docker images

    이미지가 여러 개 일 때, 특정 이미지 호출 방법

    1. REPOSITORY:TAG - docker pull 과 동일한 방식
    2. image ID - docker가 image 에 부여한 고유 ID

    실행 명령어: docker run

    docker run -d -it --name node_app node:14.16.1

    -d : 컨테이너를 백그라운드에서 실행하고 컨테이너 id 를 출력하는 옵션

    -it : 컨테이너를 종료하지 않은 채로 터미널 입력을 컨테이너로 전달하기 위해 사용

    --name: 별칭을 붙여 컨테이너 id 대신에 사용 가능

     

    - 실행되고 있는 컨테이너 확인 

    mac~ % docker ps -a

    3. 컨테이너 마운트

    컨테이너에 로컬 디렉토리 연결하기 

    마운트는 기존 파일 시스템에 새로운 저장장차의 경로를 넣는 것이다. 

    -v path1:path2 : path1 을 Path2 로 바인딩 (path2의 파일들은 지워지고 path1의 파일들로 채워짐) 

    docker run -d -it --name node_app -v [로컬디렉토리 경로]:[컨테이너 디렉토리] node:14.16.1


    visual studio 에서 컨테이너 쉘에 접속하기 

    docker exec -it node_app /bin/bash

     

    더보기

    docker commit 으로 개발 환경 image 로 저장

    node 컨테이너가 remove 된다면, 데이터는 로컬 디렉토리에 보존된다. 

    그러나 npm 등 추가 설치한 패키지는 모두 지워진다. 이를 보존하기위해 docker commit 명령어 사용! (현재 컨테이너의 상태를 이미지로 만드는 명령어)

    docker commit node-app node-app:0.0.1

     

    NginX 설정 
    (추후에 로드 밸런싱 -무중단 배포하기 위해 사용할 것임)

      Ngi nX 이미지 다운 & 작동

    mac~ % docker pull nginx
    mac~ % docker image ls # 이미지 확인
    $ docker container run --name webserver -d -p 80:80 nginx
    # 브라우저에서 HTTP(80번포트) 에 대한 엑세스를 허가하기 위해 -p 옵션 붙임

    -p: 컨테이너가 보내는 전송 허가 

     

    http://localhost:80 에 접속하여 Nginx 서버 구동 확인 

     

    # Nginx 서버 상태 확인
    $ docker container ps
    
    # 컨테이너 가동 확인
    $ docker container stats webserver
    
    #컨테이너 정지 (서버 정지)
    $ docker stop [컨테이너 명]
    
    #컨테이너 가동 (서버 가동)
    $ docker start [컨테이너 명]

    Node 서버 띄우기

    1. 디렉토리 생성& 패키지 다운

    $ mkdir ./docker-node
    $ cd ./docker-node
    $ npm init
    $ npm install --save express
    {
      "name": "docker-node",
      "version": "1.0.0",
      "description": "docker-test",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "4.18.1"
      }
    }

    2. index.js 생성

    const express = require('express')
    const app = express();
    
    // 서버 실행 시 response 로 "hello docker test" 출력 
    app.get('/',(req,res) => {
        res.send("hello docker test")
    });
    
    // 80 포트에서 응답을 받으면 로그문 출력
    app.listen(80,() => {
        console.log('test listening on port 80');
    });

     

    3. 모듈 파일은 복사하지 않도록 .dockerignore 생성 (docker 를 빌드할 때, 서버 실행에 불필요한 파일은 빌드하지 않음) 

    vi .dockerignore

    내용 : node_modules/ 

    4. Dockerfile 생성

     

    Dockerfile 이란?

    필요한 최소한의 패키지를 설치하고 동작하기 위한 자신만의 설정을 담은 파일로, 이 파일로 이미지를 빌드하게 된다. 

    패키지 설치, 환경 변수 변경 등 다양한 작업마다 컨테이너를 만들고 설정을 적용할 필요 없이 dockerfile 을 사용하여 적용가능하다. 

    vi Dockerfile
    FROM node:8 #베이스 이미지 지정
    COPY . . #파일 복사 
    RUN npm install #명령 실행 
    EXPOSE 80 #포트 익스포트 
    WORKDIR / # 작업 디렉토리 
     
    CMD node index.js #컨테이너 실행 명령

    5. 도커 이미지 빌드  & 실행 

    $ docker build --tag docker-node:dev . 
    $ docker run --name docker-node-container -p 80:80 docker-node:dev

     

    참조: https://velog.io/@jinan159/Docker%EB%A1%9C-Node.js-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%ED%95%98%EA%B8%B0feat.-M1-Macbook

    https://falsy.me/docker%EB%A5%BC-%EC%84%A4%EC%B9%98%ED%95%98%EA%B3%A0-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-nginx-node-%EC%84%9C%EB%B2%84%EB%A5%BC-%EB%B0%B0%ED%8F%AC%ED%95%B4%EB%B4%85%EB%8B%88%EB%8B%A4/

     

     

     

     

    '[Server]' 카테고리의 다른 글

    [Node] 다중 파일 올리기  (0) 2022.09.23
    스프링입문 - 데이터 조회하기 with JPA, 페이지 이동하기, 수정, 삭제  (0) 2022.09.08
    [server] Docker 시작하기  (0) 2022.07.01
    local 서버에 개발환경 구축하기  (0) 2021.10.02
    [Server] AWS 서버 구축 - gabia로 도메인 적용하기  (0) 2021.07.11
      '[Server]' 카테고리의 다른 글
      • [Node] 다중 파일 올리기
      • 스프링입문 - 데이터 조회하기 with JPA, 페이지 이동하기, 수정, 삭제
      • [server] Docker 시작하기
      • local 서버에 개발환경 구축하기
      sugang
      sugang

      티스토리툴바