본문 바로가기
Tips/Infra

Docker (nestjs, postgresql, pgadmin)

by _S0_H2_ 2024. 4. 23.
728x90
반응형

nestjs 서버를 구축한 상태에서 docker container에 올려보자.

 

1 ) Docker 설치

https://www.docker.com/products/docker-desktop/

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

- 시스템 다시 시작하기 때문에 미리 이것저것 업뎃ㅎㅏ기-

 

 

2 ) 프로젝트 최상단에 Dockerfile 생성

파일이름이 Dockerfile 

FROM node:18
RUN mkdir -p /var/app
WORKDIR /var/app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/main.js"]

 

 

3 ) 프로젝트 최상단에 .dockerignore 생성 : docker에 올리지 않을 파일들을 정의한다

.git
Dockerfile
node_modules
dist

 

 

4 ) docker를 실행시킨 뒤 터미널에서 build한다

docker build . -t nest-docker

 

그러면 이런거 저런거 설치하고 마지막 즈음에 exporting되는 것을 확인할 수 있다

 

docker/images에 가보면 새롭게 생성되어있다.

 

 

5 ) docker를 실행시킨다

- docker/images에서 버튼으로 눌러도 됨

docker container run -d -p 3000:3000 nest-docker

 

 

음.. 근데 db를 연결을 안했다.

 

 

6 ) db연결하기

현재 프로젝트에서는 postgresql을 사용 중이라 pgadmin을 설치한다

docker pull postgres
docker pull dpage/pgadmin4

 

 

postgres와 pgadmin4가 server와 같은 환경에 두기 위하여 서버와 db를 각각의 컨테이너에 담아서 이 컨테이너들을 하나의 compose로 구성해준다.

 

7 ) docker-compose.yml 파일 생성

# compose 파일 버전
version: '0.0.1'
networks:
  e-commerce_default:
    driver: bridge

services:
  # 서비스 명
  postgresql:
    # 사용할 이미지
    image: postgres
    # 컨테이너 실행 시 재시작
    restart: always
    # 컨테이너명 설정
    container_name: postgres
    # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
    ports:
      - '5432:5432'
    # 환경 변수 설정
    environment:
      # PostgreSQL 계정 및 패스워드 설정 옵션
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: mall
    networks:
      - e-commerce_default
    # 볼륨 설정
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

  pgadmin:
    image: dpage/pgadmin4
    restart: always
    container_name: pgadmin4
    ports:
      - '5050:80'
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: password
    networks:
      - e-commerce_default
    volumes:
      - ./data/pgadmin/:/var/lib/pgadmin
  ecommerce:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - '3000:3000'
    volumes:
      - .:/var/app
    environment:
      NODE_ENV: production
      POSTGRES_HOST: postgresql
      POSTGRES_PORT: 5432
      POSTGRES_DB: mall
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    networks:
      - e-commerce_default
    command: npm run start:prod

 

 

8 ) docker-compose 올리기

docker-compose up -d

 

 

 

 

 

run을 잘 하고 있다.

 

* 종료할 때

docker-compose stop

 

 

* container 삭제할 때

docker-compose rm -f
728x90
반응형

'Tips > Infra' 카테고리의 다른 글

CI/CD  (0) 2024.04.22