본문 바로가기

Sparta/TIL

[TIL] Docker 프로젝트에 적용하기

이번 프로젝트에서는 개발 및 배포환경을 컨테이너화 시켜 구축하기 위해 도커를 사용해보기로 했다. 도커는 개발환경을 이미지화 시켜서 관리할 수 있게 한다.

 

1. 도커의 장점

1) 버전 관리

도커 이미치에 언어나 프레임워크 버전을 미리 정해놓고 해당 이미지를 컨테이너화 하면 그 컨테이너는 로컬환경의 간섭 없이 독립적으로 구동하기 때문에 버전이 달라서 발생하는 이슈를 해결할 수 있다. 또한 Dockerfile을 사용하면 설치할 언어, 프레임워크, 패키지 등을 미리 코드형태로 명시하고 어느 컴퓨터에서든 쉽게 자동으로 설치할 수 있다.

 

2) 환경 설정

서버 컴퓨터를 내 개발환경과 같은 환경으로 쉽게 설정할 수 있다. 서버를 옮기거나 늘릴 때 새로운 서버에 하나하나 이전 서버에서 쓰던 언어나 프레임워크를 설치하지 않아도 이미지만을 가져와 새로운 서버에 컨테이너를 만들어 쉽게 동일한 환경을 구축할 수 있다. 또한 하나의 물리서버에서 여러 도커컨테이너를 돌려 여러 서비스를 배포하는 것도 가능하다.

 

3) 성능

다른 가상 환경기술에 비해 가볍고 빠른 실행속도를 가진다. 기존의 가상화 방식은 각 가장환경마다 독립된 커널 OS가 존재하여 매우 무겁고 느릴 수 밖에 없었다. 또한 각 환경마다 쓸 수 있는 자원이 고정으로 정해져 있기 때문에 컴퓨터의 성능과 환경이 제한된다. 그러나 도커는 기존의 커널 OS 가원을 계승하여 사용하고 각 환경에서 사용할 수 있는 자원이 고정으로 정해져 있지 않아 유연하게 적용할 수 있다.

 

 

2. 도커 코드 작성

1) Dockerfile

# Node.js 기반 이미지 선택
FROM node:20.11.0
# 애플리케이션 디렉토리 생성
WORKDIR /usr/src/app
# 애플리케이션 의존성 파일 복사
COPY package*.json ./
# 패키지 설치
RUN npm install --verbose
# 애플리케이션 소스 복사 (src 폴더와 나머지 필요한 파일만 복사)
COPY src ./src
COPY tsconfig*.json ./
COPY nest-cli.json ./
# 애플리케이션 빌드
RUN npm run build --verbose
# 애플리케이션 시작
CMD ["node", "dist/main"]

 

2) .dockerignore

# 노드 모듈 제외
node_modules
# NestJS 빌드 폴더 제외
dist
# 환경 설정 파일 제외
#.env
# Git 관련 파일/디렉토리 제외
.git
.gitignore
# npm 디버그 로그
npm-debug.log
# 에디터 설정 파일 제외
.vscode
*.swp
*.swo
# 운영체제 생성 파일 제외
.DS_Store
Thumbs.db

 

 

위의 두 파일을 작성한 뒤 빌드한다.

docker build . -t [프로젝트 이름]

 

그리고 이미지를 확인한다.

docker images

 

그리고 프로젝트 이미지가 잘 생성되었다면 

docker run -d --name [컨테이너 이름] [프로젝트 이미지 이름]

 

도커 컨테이너가 잘 실행되고 있는지 확인하려면

docker ps

 

 

 

참조

https://formulous.tistory.com/14

 

[Docker] Nestjs 프로젝트를 Docker Image로 배포 해봅시다.

안녕하세요. 이번 업무에서 회사 내의 프로젝트를 Docker 이미지화하라는 지시를 받게 되었는데요. 이번에도 역시 왜 이러한 업무를 진행하는 것인지, 방법은 무엇인지 먼저 알아보고 업무를 진

formulous.tistory.com