728x90
Docker는 Windows, Linux 및 MacOS에서 실행되는 오픈 소스 소프트웨어로, 이를 통해 개발자는 애플리케이션과 종속성을 함께 이미지 라는 경량의 독립 실행형 독립형 단위로 패키징할 수 있습니다.
Node.js 앱 만들기
프로젝트 설정
Docker는 Windows, Linux 및 MacOS에서 실행되는 오픈 소스 소프트웨어로, 이를 통해 개발자는 애플리케이션과 종속성을 함께 이미지 라는 경량의 독립 실행형 독립형 단위로 패키징할 수 있습니다.
Node.js 앱 만들기
프로젝트 설정
새로운 node-app-with-docker 디렉터리 생성.
$ mkdir node-app-with-docker
$ cd node-app-with-docker
npm으로 프로젝트 초기화
$ npm init -y
express 패키지 설치
$ npm i express
서버 생성
server.js 파일 생성
$ touch server.js
Express 프레임워크를 사용해 간단한 Http 서버 작성 :
- HTTP 200 “Hello World”를 반환하는 GET 라우트
- HTTP 404 “Not Found”를 반환하는 폴백 라우트
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello World!'));
app.all('*', (req, res) => res.sendStatus(404));
app.listen(3000);
console.log(`Application is running on: 127.0.0.1:3000`);
서버를 실행하여 동작 확인
$ node server.js
Application is running on: 127.0.0.1:3000
새로운 터미널을 열어 E2E 테스트
$ curl 127.0.0.1:3000
Hello World
$ curl 127.0.0.1:3000/foo
Not Found
Dockerfile 만들기
Dockerfile는 Docker 이미지를 빌드하는 데 필요한 모든 지침이 포함된 텍스트 파일입니다.
이러한 지침은 명령줄 도구 설치 및 구성, 환경 변수 선언, 로컬 환경에서 파일 복사 등에 사용할 수 있습니다.
Dockerfile 지침 개요
이 프로젝트의 Dockerfile 은 다음과 같습니다 :
- node:18-alpine 이미지를 내려받는다.
- 응용 프로그램의 파일을 복사할 app 디렉터리를 만든다.
- npm을 사용해 package.json 파일에 나열된 의존성을 설치한다.
- node 유틸리티를 사용해 서버를 시작한다.
Dockerfile 생성
$ touch Dockerfile
Dockerfile 에 아래와 같이 기입합니다. (#으로 시작하는 줄은 주석이며 빌드시 무시해도 됩니다.)
# 기본 이미지 초기화 (Alpine Linux + Node.js v16)
FROM node:16-alpine
# 작업 디렉터리 설정(컨테이너의 파일 시스템에 존재하지 않는 경우 자동 생성)
WORKDIR /app
# 로컬 디렉터리에서 컨테이너 디렉터리로 모든 것을 복사
COPY . .
# 앱의 의존성 패키지 설치
RUN npm install
# 수신 대기 포트 설정
EXPOSE 3000
# CMD 컨테이너 시작시 서버 실행
CMD node server.js
애플리케이션 패키징
이미지 빌드
$ docker build -t node-app .
- -t : 이미지에 태그 지정. 이름을 지어주는 것.
- .(점) : 이미지가 빌드 될 Dockerfile 디렉터리 경로.
이미지 빌드 확인
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node-app latest 798258798df2 2 hours ago 179MB
컨테이너 실행
$ docker run -d -p 3000:3000 node-app
- -d : 백그라운드에서 컨테이너를 시작
- -p : 로컬 환경의 3000번 포트를 컨테이너의 3000번 포트에 연결
마지막으로 동작 확인
$ curl 127.0.0.1:3000
Hello World
$ curl 127.0.0.1:3000/foo
Not Found
728x90
댓글