> 웹 프론트엔드 > JS 튜토리얼 > Docker 실습: Nodejs, Flask, PostgreSQL을 사용하여 Docker Compose 파일 알아보기

Docker 실습: Nodejs, Flask, PostgreSQL을 사용하여 Docker Compose 파일 알아보기

Linda Hamilton
풀어 주다: 2025-01-14 18:28:14
원래의
636명이 탐색했습니다.

Docker Hands-on: Learn Docker Compose File with Nodejs, Flask, PostgreSQL

이전 게시물에서 Docker 튜토리얼에 대해 언급한 적이 있습니다.

  • https://dev.to/omerberatzezer/docker-tutorial-dockerfile-commands-container-images-volume-network-docker-compose-2p9h

이번에는 샘플 프로젝트를 실행하기 시작합니다. Nodejs, Flask, PostgreSQL 이미지가 포함된 Docker Compose 파일에 중점을 두고 다양한 계층을 구현합니다.

  • 프런트엔드(expressjs가 포함된 nodejs),
  • 백엔드(플라스크),
  • 데이터베이스(postgresql).

다음 내용을 보여줍니다.

  • 여러 컨테이너를 실행하는 방법
  • dependent_on을 사용하여 컨테이너를 순차적으로 실행하는 방법
  • 동일 네트워크에서 컨테이너를 실행하는 방법
  • 작성 파일에서 볼륨을 생성하는 방법
  • 포트포워딩 구현 방법

GitHub 코드 저장소: https://github.com/omerbsezer/Fast-Docker/tree/main/hands-on-sample-projects/full-stack-app

프로젝트 구조:

project-root/
├── docker-compose.yaml
├── frontend/
│   ├── package.json
│   ├── index.js
│   ├── index.html
│   ├── Dockerfile
├── backend/
│   ├── app.py
│   ├── requirements.txt
│   ├── Dockerfile
로그인 후 복사
  • 프런트엔드 디렉터리를 만들고 Dockerfile을 만듭니다.
FROM node:18
WORKDIR /home/app
COPY . .
EXPOSE 3000
RUN npm install
CMD ["npm", "start"]
로그인 후 복사
  • index.html 만들기:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Frontend</title>
</head>
<body>
  <h1>Frontend is working!</h1>
</body>
</html>
로그인 후 복사
  • index.js(익스프레스 js) 만들기:
const express = require("express");
const app = express();
const port=3000;

app.get("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
})

app.listen(port, () => {
  console.log(`running at port ${port}`);
});
로그인 후 복사
  • package.json 만들기:
{
  "name": "nodejsapp",
  "version": "1.0.0",
  "description": "nodejsapp description",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.3"
  }
}
로그인 후 복사
  • 그런 다음 백엔드 디렉터리를 만들고 Dockerfile을 만듭니다.
FROM python:3.11
WORKDIR /usr/src/app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
로그인 후 복사
  • Flask를 사용하여 백엔드 앱 만들기:
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def home():
    return "Backend is working!"

@app.route('/api', methods=['GET'])
def api():
    return jsonify({"message": "Hello from the backend!"})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
로그인 후 복사
  • requirements.txt 만들기:
flask
로그인 후 복사
  • 마지막으로 백엔드 및 프런트엔드 디렉터리 위에 docker-compose.yaml을 만듭니다.
services:
  frontend:
    build:
      context: ./frontend
    container_name: frontend
    ports:
      - "3000:3000"
    volumes:
      - ./frontend:/usr/src/app
    depends_on:
      - backend

  backend:
    build:
      context: ./backend
    container_name: backend
    ports:
      - "5000:5000"
    volumes:
      - ./backend:/usr/src/app
    command: sh -c "pip install -r requirements.txt && python app.py"

  db:
    image: postgres:15
    container_name: db
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydatabase
    volumes:
      - db_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  db_data:
로그인 후 복사
  • 그런 다음 docker-compose.yaml이 있는 위치에서 명령을 실행합니다.
user@docker:~$ docker compose up -d
[+] Running 4/4
 ✔ Network node_default  Created                                                                                                                                                                            0.1s
 ✔ Container db          Started                                                                                                                                                                            0.7s
 ✔ Container backend     Started                                                                                                                                                                            0.7s
 ✔ Container frontend    Started  
로그인 후 복사
  • 그런 다음 컬을 사용하여 프런트엔드와 백엔드를 확인합니다.
user@docker:~$ curl http://localhost:3000
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Frontend</title>
</head>
<body>
  <h1>Frontend is working!</h1>
</body>

user@docker:~$ curl http://localhost:5000/api
{"message":"Hello from the backend!"}

user@docker:~$ curl http://localhost:5000
Backend is working!
</html>
로그인 후 복사
  • 마지막으로 컨테이너를 중지합니다.
user@docker:~$ docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS              PORTS                                       NAMES
3e51751b546c   node-frontend   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   frontend
d8d28325ce10   postgres:15     "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   db
04c1d04a5668   node-backend    "sh -c 'pip install …"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   backend
user@docker:~$ docker compose down
[+] Running 4/4
 ✔ Container frontend    Removed                                                                                                                                                                            1.0s
 ✔ Container db          Removed                                                                                                                                                                            0.5s
 ✔ Container backend     Removed                                                                                                                                                                           10.5s
 ✔ Network node_default  Removed                                                                                                                                                                            0.2s
user@docker:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
로그인 후 복사

결론

이 게시물에서는 샘플 프런트엔드(express.js), 백엔드(flask), 데이터베이스(postgresql) 앱을 사용하여 Docker Compose 파일을 생성하는 방법을 보여줍니다. 이전에 본 적이 없다면 아래 메뉴에서 다른 Docker 콘텐츠를 살펴보세요.

AWS, Kubernetes, Docker, Linux, DevOps, Ansible, Machine Learning, Generative AI, SAAS에 대한 팁, 튜토리얼, Hands-On Lab을 팔로우하세요.

  • https://github.com/omerbsezer/
  • https://www.linkedin.com/in/omerberatzezer/

위 내용은 Docker 실습: Nodejs, Flask, PostgreSQL을 사용하여 Docker Compose 파일 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿