Rumah > hujung hadapan web > tutorial js > Docker Hands-on: Belajar Docker Compose Fail dengan Nodejs, Flask, PostgreSQL

Docker Hands-on: Belajar Docker Compose Fail dengan Nodejs, Flask, PostgreSQL

Linda Hamilton
Lepaskan: 2025-01-14 18:28:14
asal
636 orang telah melayarinya

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

Dalam siaran sebelumnya, kami menyebut tentang tutorial Docker masuk.

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

Kali ini, kami mula menjalankan projek sampel: Memfokuskan pada fail Docker Compose dengan imej Nodejs, Flask, PostgreSQL untuk melaksanakan peringkat yang berbeza:

  • bahagian hadapan (nodejs dengan expressjs),
  • belakang (kelalang),
  • pangkalan data (postgresql).

Ia menunjukkan:

  • cara menjalankan berbilang bekas
  • cara menjalankan bekas secara berurutan dengan depende_on
  • cara menjalankan kontena dalam rangkaian yang sama
  • cara mencipta volum dalam fail karang
  • cara melaksanakan port-forwarding

Repo Kod GitHub: https://github.com/omerbsezer/Fast-Docker/tree/main/hands-on-sample-projects/full-stack-app

Struktur projek:

project-root/
├── docker-compose.yaml
├── frontend/
│   ├── package.json
│   ├── index.js
│   ├── index.html
│   ├── Dockerfile
├── backend/
│   ├── app.py
│   ├── requirements.txt
│   ├── Dockerfile
Salin selepas log masuk
  • Buat direktori bahagian hadapan, buat Fail Docker:
FROM node:18
WORKDIR /home/app
COPY . .
EXPOSE 3000
RUN npm install
CMD ["npm", "start"]
Salin selepas log masuk
  • Buat 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>
Salin selepas log masuk
  • Buat 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}`);
});
Salin selepas log masuk
  • Buat 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"
  }
}
Salin selepas log masuk
  • Kemudian, buat direktori backend, dan buat Dockerfile:
FROM python:3.11
WORKDIR /usr/src/app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
Salin selepas log masuk
  • Buat apl bahagian belakang dengan kelalang:
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)
Salin selepas log masuk
  • Buat keperluan.txt:
flask
Salin selepas log masuk
  • Akhirnya buat docker-compose.yaml di atas direktori backend dan frontend:
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:
Salin selepas log masuk
  • Kemudian, jalankan arahan pada tempat 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  
Salin selepas log masuk
  • Kemudian, semak bahagian hadapan, hujung belakang dengan 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>
Salin selepas log masuk
  • Akhir sekali, hentikan bekas:
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
Salin selepas log masuk

Kesimpulan

Siaran ini menunjukkan cara membuat fail karang Docker menggunakan apl contoh frontend (express.js), backend (flask), pangkalan data (postgresql). Sila lihat di bawah menu untuk kandungan Docker yang lain, jika anda belum pernah melihatnya.

Ikuti Petua, Tutorial, Makmal Hands-On untuk AWS, Kubernetes, Docker, Linux, DevOps, Ansible, Pembelajaran Mesin, Generatif AI, SAAS.

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

Atas ialah kandungan terperinci Docker Hands-on: Belajar Docker Compose Fail dengan Nodejs, Flask, PostgreSQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan