首页 > web前端 > js教程 > Docker 实践:学习 Docker 使用 Nodejs、Flask、PostgreSQL 编写文件

Docker 实践:学习 Docker 使用 Nodejs、Flask、PostgreSQL 编写文件

Linda Hamilton
发布: 2025-01-14 18:28:14
原创
636 人浏览过

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

在上一篇文章中,我们提到了 Docker 教程。

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

这一次,我们开始运行示例项目:重点关注使用 Nodejs、Flask、PostgreSQL 镜像的 Docker Compose 文件来实现不同的层:

  • 前端(nodejs 和expressjs),
  • 后端(烧瓶),
  • 数据库(postgresql)。

它显示:

  • 如何运行多个容器
  • 如何使用depends_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(express 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  
登录后复制
  • 然后,用curl检查前端、后端:
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、机器学习、生成式 AI、SAAS 的提示、教程和实践实验室。

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

以上是Docker 实践:学习 Docker 使用 Nodejs、Flask、PostgreSQL 编写文件的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板