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