Node 설정
1. Docker 에서 노드 이미지 받기
mac % docker pull node:14.16.1
node:14.16.1
- LTS 버전, '이미지이름':'tag(버전정보)'
2. 도커 이미지 실행
Node 이미지를 실행하기 전에, 로컬로 가져온 이미지를 확인
mac~ % docker images
이미지가 여러 개 일 때, 특정 이미지 호출 방법
- REPOSITORY:TAG - docker pull 과 동일한 방식
- image ID - docker가 image 에 부여한 고유 ID
실행 명령어: docker run
docker run -d -it --name node_app node:14.16.1
-d : 컨테이너를 백그라운드에서 실행하고 컨테이너 id 를 출력하는 옵션
-it : 컨테이너를 종료하지 않은 채로 터미널 입력을 컨테이너로 전달하기 위해 사용
--name: 별칭을 붙여 컨테이너 id 대신에 사용 가능
- 실행되고 있는 컨테이너 확인
mac~ % docker ps -a
3. 컨테이너 마운트
컨테이너에 로컬 디렉토리 연결하기
마운트는 기존 파일 시스템에 새로운 저장장차의 경로를 넣는 것이다.
-v path1:path2 : path1 을 Path2 로 바인딩 (path2의 파일들은 지워지고 path1의 파일들로 채워짐)
docker run -d -it --name node_app -v [로컬디렉토리 경로]:[컨테이너 디렉토리] node:14.16.1
visual studio 에서 컨테이너 쉘에 접속하기
docker exec -it node_app /bin/bash
docker commit 으로 개발 환경 image 로 저장
node 컨테이너가 remove 된다면, 데이터는 로컬 디렉토리에 보존된다.
그러나 npm 등 추가 설치한 패키지는 모두 지워진다. 이를 보존하기위해 docker commit 명령어 사용! (현재 컨테이너의 상태를 이미지로 만드는 명령어)
docker commit node-app node-app:0.0.1
NginX 설정
(추후에 로드 밸런싱 -무중단 배포하기 위해 사용할 것임)
Ngi nX 이미지 다운 & 작동
mac~ % docker pull nginx
mac~ % docker image ls # 이미지 확인
$ docker container run --name webserver -d -p 80:80 nginx
# 브라우저에서 HTTP(80번포트) 에 대한 엑세스를 허가하기 위해 -p 옵션 붙임
-p: 컨테이너가 보내는 전송 허가
http://localhost:80 에 접속하여 Nginx 서버 구동 확인
# Nginx 서버 상태 확인
$ docker container ps
# 컨테이너 가동 확인
$ docker container stats webserver
#컨테이너 정지 (서버 정지)
$ docker stop [컨테이너 명]
#컨테이너 가동 (서버 가동)
$ docker start [컨테이너 명]
Node 서버 띄우기
1. 디렉토리 생성& 패키지 다운
$ mkdir ./docker-node
$ cd ./docker-node
$ npm init
$ npm install --save express
{
"name": "docker-node",
"version": "1.0.0",
"description": "docker-test",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "4.18.1"
}
}
2. index.js 생성
const express = require('express')
const app = express();
// 서버 실행 시 response 로 "hello docker test" 출력
app.get('/',(req,res) => {
res.send("hello docker test")
});
// 80 포트에서 응답을 받으면 로그문 출력
app.listen(80,() => {
console.log('test listening on port 80');
});
3. 모듈 파일은 복사하지 않도록 .dockerignore 생성 (docker 를 빌드할 때, 서버 실행에 불필요한 파일은 빌드하지 않음)
vi .dockerignore
내용 : node_modules/
4. Dockerfile 생성
Dockerfile 이란?
필요한 최소한의 패키지를 설치하고 동작하기 위한 자신만의 설정을 담은 파일로, 이 파일로 이미지를 빌드하게 된다.
패키지 설치, 환경 변수 변경 등 다양한 작업마다 컨테이너를 만들고 설정을 적용할 필요 없이 dockerfile 을 사용하여 적용가능하다.
vi Dockerfile
FROM node:8 #베이스 이미지 지정
COPY . . #파일 복사
RUN npm install #명령 실행
EXPOSE 80 #포트 익스포트
WORKDIR / # 작업 디렉토리
CMD node index.js #컨테이너 실행 명령
5. 도커 이미지 빌드 & 실행
$ docker build --tag docker-node:dev .
$ docker run --name docker-node-container -p 80:80 docker-node:dev

'[Server]' 카테고리의 다른 글
| [Node] 다중 파일 올리기 (0) | 2022.09.23 |
|---|---|
| 스프링입문 - 데이터 조회하기 with JPA, 페이지 이동하기, 수정, 삭제 (0) | 2022.09.08 |
| [server] Docker 시작하기 (0) | 2022.07.01 |
| local 서버에 개발환경 구축하기 (0) | 2021.10.02 |
| [Server] AWS 서버 구축 - gabia로 도메인 적용하기 (0) | 2021.07.11 |