본문 바로가기

Docker, CI

Docker 활용해보기 - express 서버 올려보기

npm init 

npm i --save express 를 통해 express서버를 구축해둔다.

 

폴더 구조 

 

server.js

"use strict";

const express = require("express");

const PORT = 8080;
const HOST = "0.0.0.0";

const app = express();
app.get("/", (req, res) => {
  res.send("this is a hompage");
});

app.listen(PORT, HOST);
console.log(`Running On ${HOST}:${PORT}`);

 

Docker를 활용할수 있게 Dockerfile을 생성해준다.

 

Dockerfile 

FROM node:latest

WORKDIR /usr/src/app

COPY package.json ./

RUN npm install

COPY  . .

EXPOSE 8080

CMD ["node","server.js"]

Dockerfile에 사용하는 명령어 

 

FROM : 이미지를 생성할 때 사용할 기반 이미지를 지정한다. node의 최신버전을 활용하였다.

 

RUN : 이미지를 생성할 때 실행할 코드를 지정한다. 예제에서는 패키지를 설치를 위해 RUN을 사용했다(npm install)

 

WORKDIR : 작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성한다. 작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작한다.

 

COPY : 파일이나 폴더를 이미지에 복사한다. 상대 경로를 사용할 경우 WORKDIR로 지정한 디렉토리를 기준으로 복사한다.

 

ENV : 이미지에서 사용할 환경 변수 값을 지정한다. 

 

EXPOSE : 호스트와 통신할 port를 지정합니다. 

 

CMD:  container가 만들어질 때 실행할 명령어를 설정한다. 

CMD ["node","server.js"] 와 같게 동작한다.

 

ENTRYPOINT : 컨테이너를 구동할 때 실행할 명령어를 지정한다.

 

 

 

준비가 다 되었다면 docker에서 사용할수 있는 이미지 형식으로 빌드를 해줘야한다.

powershell에서 docker build -t app . 을 통해 build를 진행한다. 

 

빌드가 완료되면 

 

docker run -p 8000:8080 -d app (포트를바인딩해서 build한 app을 실행

하면 정상적으로 실행이 된다.

 

docker ps -a 를 통해 현재 실행중인 docker를 확인할 수 있다. (docker stop containerID를 입력하면 중단된다)

localhost:8000 을 접속해보면 

 

정상적으로 서버가 동작하는것을 알 수 있다.

 

Command Line으로 테스트하기 

 

docker exec -it CONTAINERID /bin/bash 를 입력하면 bash shell을 통해 해당 컨테이너에 접근이 가능하다.

 

 

 

컨테이너에 접근하면 기본적으로 사용할수있는 명령어 체계들을 사용할 수 있다,