본문 바로가기

Container/Docker

[Docker] 도커로 Node.js, flask 서버 이미지 만들어 사용하기

728x90
반응형

Node.js 서버 이미지

먼저 Node.js 서버 프로젝트를 만들어야한다.

npm install express
npm install ejs
// server.js
const express = require("express");
const app = express();

let router = require("./routes/main")(app);

app.set("views", __dirname + "/views");
app.set("view engine", "ejs");
app.engine("html", require("ejs").renderFile);

let server = app.listen(3000, () => {
    console.log("Server Start!!");
});
// main.js
module.exports = (app) => {
    app.get("/", (req, res) => {
        res.render("index", {
            title: "Express Page!!",
        });
    });
};
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title><%= title %></title>
    </head>
    <body>
        <h1><%= title %></h1>
        <p>Express로 만들어진 페이지 입니다.</p>
    </body>
</html>

 

이 다음은 Dockerfile을 작성하자

# 공식 Node.js 런타임 이미지를 베이스 이미지로 사용합니다
FROM node:18

# 컨테이너 내에서 작업 디렉토리를 설정합니다
WORKDIR /usr/src/app

# package.json과 package-lock.json 파일을 컨테이너로 복사합니다
COPY node-app/package*.json ./

# 앱의 의존성 패키지를 설치합니다
RUN npm install

# 나머지 애플리케이션 코드를 컨테이너로 복사합니다
COPY node-app/src ./src

# 앱이 실행되는 포트를 노출합니다
EXPOSE 3000

# 애플리케이션을 실행하는 커맨드를 설정합니다
CMD ["node", "src/server.js"]

이제 이미지를 빌드하자

docker build -t node-app .

빌드 된 이미지로 컨테이너를 실행하고 서버를 실행해보자.

docker run -p 3000:3000 -d node-app
  • -p 옵션은 호스트와 컨테이너 간의 포트 맵핑을 설정한다. (호스트:컨테이너)
  • -d 옵션은 컨테이너를 백그라운드에서 실행하도록 한다.

 

Flask 서버 이미지 만들기

먼저 Flask 서버를 만들어보자.

/
└─ src/
    ├─main.py/
   └─ templates/
        ├─index.html/
from flask import Flask, render_template

main = Flask(__name__)


@main.route('/')
def index():
    title = 'Flask Server With Docker'
    return render_template('index.html', title=title)


if __name__ == '__main__':
    main.run(host='0.0.0.0', port=5050)
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Flask</title>
    </head>
    <body>
        <h1>{{ title }}</h1>
    </body>
</html>
# 공식 Python 런타임 이미지를 베이스 이미지로 사용
FROM python:3.9-alpine

# 컨테이너 내에서 작업 디렉토리를 설정합니다
WORKDIR /usr/src/app

# Flask 앱 코드를 컨테이너로 복사합니다
COPY src ./src

# requirements.txt를 컨테이너로 복사하고 필요한 패키지를 설치합니다
COPY requirements.txt ./
RUN pip install -r requirements.txt

# 앱이 실행되는 포트를 노출합니다
EXPOSE 5050

# 애플리케이션을 실행하는 커맨드를 설정합니다
CMD ["python", "src/main.py"]

이미지를 빌드하자.

docker build -t flask-app .

이미지를 사용해 컨테이너 실행.

 

728x90
반응형