Dockerfile을 이해하고 직접 만들 수 있다
docker build, docker run을 실행해 서버를 띄울 수 있다
node-docker-test라는 폴더 생성
아래 구조로 파일 구성:
node-docker-test/
├── app.js
├── package.json
├── Dockerfile
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => res.send('Hello Docker!'));
app.listen(PORT, () => console.log(`Server on ${PORT}`));
npm init -y
npm install express
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
여기서 Dockerfile의 각 명령어들을 간단 정리하자면
FROM: 생성할 이미지의 베이스가 될 이미지를 결정하는 명령어,
이 명령어를 시작으로 Dockerfile을 작성한다.
WORKDIR: 명령어를 실행할 디렉토리를 지정하는 명령어(= linux cd명령어)
EXPOSE: Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 지정하는 명령어,
그러나 EXPOSE를 설정한 이미지를 기반으로 컨테이너를 생성한다고해서 이 포트가 호스트의 포트와 바인딩하는 것은 아니며, 단지 해당 이미지를 사용하는 사용자에게 해당 포트를 사용한다고 문서화하는 목적을 가지는 것 뿐이다.
Q.만약 publish하고 싶으면?
docker run 명령어에 -p 옵션으로 포트를 지정
COPY: 현재 디렉토리 경로의 모든 파일과 디렉토리를 해당 디렉토리의 디렉토리에다가 모두 복사하는 명령어,
COPY <src> <dest>
src는 호스트 운영체제 경로, dest는 이미지 상에서 경로
RUN: 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행한다.
docker build -t node-test .
docker run -p 3000:3000 node-test
-p옵션으로 포트바인딩한다
3000:3000
[호스트의 포트] : [컨테이너의 포트]
