본 문서는 2022년 5월 2일 에 작성되었습니다.
git init
git remote add origin https://github.com/~/저장소.git
npm init -y
{
"script": {
"start": "server.js"
}
}
const express = require('express');
const PORT = 8000;
const HOST = '0.0.0.0';
const app = express();
app.get('/', (req, res) => res.send('Hello world');
app.listen(PORT,HOST);
console.log(`Running on http://${HOST}:${PORT}`);
FROM
베이스 이미지 설정WORKDIR
COPY 파일의 저장 경로 설정COPY
지정 파일을 스냅샷에 포함RUN
추가적으로 필요한 파일을 다운로드CMD
컨테이너 시작 시 실행 될 명령어를 명시FROM node:14
WOKRDIR /user/src/app
COPY package.json ./
RUN npm install
COPY ./ ./
CMD ["node", "server.js"]
왜, 아래처럼 하지 않는가?
COPY ./ ./ RUN npm install
수정 확인
을 하기 위해서는 docker 을재실행
해야 합니다.
이 경우,./
가 하나의 묶음으로 해석되어 코드 한 줄만 수정해도 모든node_modules
가 재설치 되게 됩니다.따라서, 아래처럼 하게 되면
package.json
이 분리되어 결과적으로 종속성 설치 절차가 1회만 실행되게 됩니다.COPY package.json ./ RUN npm install COPY ./ ./
version
도커 컴포즈 버전 (필수)services
동시에 실행할 도커 컨테이너 리스트container name
컨테이너 이름 + 하위에 추가 옵션version: '3' # 도커 컴포즈 버전
services: # 실행 하려는 컨테이너 들
redis-server: # 컨테이너 이름
image: 'redis' # 컨테이너에서 사용하는 이미지
node-app: # 컨테이너 이름
build: . # 현 디렉토리에 있는 Dockerfile
ports: # 포트 매핑 # 로컬 포트 : 도커 포트
- "49160:8000"
docker build ./ -t unchpatered/node14
~
안에는 저장할 이름을 적으며, 관행상 계정명/이미지명:버전
으로 기록합니다.
docker run -p 49160
:8000
unchpatered/node14
49160
로컬에서 컨테이너에 접속하기 위한 경로8000
node application 의 지정 포트unchaptered/node14
이미지 명docker build, run 은 작성된 파일을 기본으로 스냅샷을 만들어 이미지를 제작 실행하는 과정입니다.
컨테이너를 실행할 때, volume 옵션을 줘서 일일히 build 하지 않고 run 절차에서 변화 내용을 이미지에 반영할 수 있습니다.
docker run -p 49160:8000 -v /usr/src/app/node_modules
-v %cd%:/usr/src/app
unchaptered/node14
-v /usr/src/app/node_modules
참조하지 않을 경로-v ${pwd}:/usr/src/app
참조할 경로왜, node_modules 를 무시할 것인가요?
로컬 환경에서 npm i 를 하지 않았으며 종속성 설치는 컨테이너빌드
절차에서 진행이 됩니다.
따라서 실행 단계에서 이를 참조해서는 안되는 것입니다.
많은 Application 은 SQL, NoSQL 데이터베이스와 연동이 됩니다.
따라서 이러한 경우 N 개의 컨테이너가 필요하지만, 이 둘은 모두 독립된 공간
에 자리하게 됩니다.
따라서 docker-compose.yml
파일을 통해서 N 개의 컨테이너를 매핑하고 동시에 실행해주어야 합니다.
docker-compose up 실행하고 출력 창 계속 보기
docker-compose up -d 실행하고 출력 창에서 나가기
docker-compose down 중지하기 (stop 이므로 안전한 종료입니다.)
추가적으로,
docker-compose up 화면에서Ctrl+C
을 누르면docker-compose down
과 동일하게 안전하게 종료할 수 있습니다.