반응형

nest.js 프로젝트를 생성해서 docker로 배포해보도록 하겠습니다.

 

nestjs 새 프로젝트 생성 (docker)

nestjs cli 설치

npm install -g @nestjs/cli

새로운 프로젝트 생성

nest new nest-test



Dockerfile 생성

## base image for Node 10-alpine(light weight)
FROM node:10-alpine
WORKDIR /app

## 프로젝트의 모든 파일을 WORKDIR(/app)로 복사한다
COPY . .

## Nest.js project를 build 한다
RUN yarn install
RUN yarn build

## application 실행
EXPOSE 80
CMD ["yarn", "start:dev"]

💡 start ⇒ typescript로 작성되어있는 서버 실행
💡 start:dev ⇒ nodemon을 활용해서 소스코드가 변경될 시 서버를 자동으로 재실행
💡 start:prod ⇒ build 명령어를 통해 컴파일되어 생성된 js 파일을 실행

.dockerignore 파일 생성

node_modules
dist

 

도커 이미지 빌드

docker build -t nest-test .

 

백그라운드에서 실행하기

docker run -d -p [연결할포트번호]:80 [리포지토리]:[태그]


컨테이너 id로 docker log를 확인할 수 있습니다.

반응형

'Backend > Docker' 카테고리의 다른 글

[DOCKER] Docker 이해하고 사용하기 (1)  (0) 2022.02.13
반응형

Docker란?

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
  • 다양한 환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램 배포 및 관리를 단순하게 한다.

컨테이너란?

  • 컨테이너는 개별 소프트웨어의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반 환경 또는 다른 실행환경과의 간섭을 막고, 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술입니다.
  • 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공한다.

💡 두 개의 소프트웨어가 동일한 라이브러리를 사용하지만 버전 또는 운영체제가 다를 경우 도커를 이용하여 간단하게 해결할 수 있다.

  • 컨테이너는 이미지를 실행한 상태이고, 추가되거나 변하는 값은 컨테이너에 저장됩니다.

이미지란?

  • 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있다.
  • 상태 값을 가지지 않고 변하지 않는다.
  • 같은 이미지에서 여러 개의 컨테이너 생성 가능
  • 컨테이너의 상태가 바뀌거나 삭제되어도 변하지 않는다.

💡 이미지는 컨테이너 정보를 가지고 있기 때문에 용량이 크다. 만약 파일 하나가 추가돼서 이미지가 변경되어야 한다면 굉장히 비효율적이다. → 이런 문제로 layer라는 개념을 사용한다.

docker layer

  • 이미지는 여러개의 읽기 전용 layer로 구성되고, 파일이 추가되거나 수정되면 새로운 layer가 추가된다.
  • web app 이미지에서 web app source 파일을 수정했다면 web app source 만 다운로드하면 된다.

컨테이너 실행 옵션들

docker 명령어

  • 컨테이너 목록 확인 docker ps [option] [컨테이너 id]
  • 컨테이너 중지 docker stop [option] CONTAINER [컨테이너 id]
  • 이미지 목록 확인 docker images [option]
  • 이미지 다운로드 docker pull [option] 이미지명:[tag|@digest]
  • 이미지 삭제 docker rmi [option]

Dockerfile

💡 Dockerfile의 한줄한줄은 레이어 형태로 저장되기 때문어 RUN을 줄이면 레이어가 줄어들고, 캐시도 효율적으로 관리할 수 있다.

  • FROM : 어떤 이미지로부터 이미지를 생성할지 지정해줌
  • RUN : 명령어 실행 지시자
    • && : 여러 명령어를 이어서 실행하기 위한 연산자
    • \ : 명령어를 여러줄에 작성하기 위한 문자
  • WORKDIR : 디렉토리 변경
  • ENV : 컨테이너 실행 환경에 적용되는 환경변수의 기본값을 지정하는 지시자
  • EXPOSE : 가상머신에 오픈할 포트 지정
  • CMD : 컨테이너에서 실행될 명령어 지정
# moniwiki 모니위키 도커파일

FROM ubuntu:14.04

RUN apt-get update &&\\
  apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs

WORKDIR /tmp
RUN \\
  curl -L -O <https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz> &&\\
  tar xf /tmp/v1.2.5p1.tar.gz &&\\
  mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\\
  chown -R www-data:www-data /var/www/html/moniwiki &&\\
  chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\\
  chmod +x /var/www/html/moniwiki/secure.sh &&\\
  /var/www/html/moniwiki/secure.sh

RUN a2enmod rewrite

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"



[Docker] - [DOCKER] Docker 이해하고 사용하기 (2)

반응형

'Backend > Docker' 카테고리의 다른 글

[DOCKER] Docker 이해하고 사용하기 (2)  (0) 2022.02.13

+ Recent posts