Docker ハンズオン: Nodejs、Flask、PostgreSQL を使用して Docker Compose ファイルを学習する
前の投稿では、Docker チュートリアルについて説明しました。
- https://dev.to/omerberatsezer/docker-tutorial-dockerfile-commands-container-images-volume-network-docker-compose-2p9h
今回は、サンプル プロジェクトの実行を開始します: Nodejs、Flask、PostgreSQL イメージを含む Docker Compose ファイルに焦点を当てて、さまざまな層を実装します:
- フロントエンド (expressjs を使用した nodejs)、
- バックエンド (フラスコ)、
- データベース (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"]
- フラスコを使用してバックエンド アプリを作成します:
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 構成ファイルを作成する方法を示します。まだご覧になっていない場合は、下のメニューで他の Docker コンテンツをご覧ください。
AWS、Kubernetes、Docker、Linux、DevOps、Ansible、機械学習、生成 AI、SAAS のヒント、チュートリアル、ハンズオン ラボについてはフォローしてください。
- https://github.com/omerbsezer/
- https://www.linkedin.com/in/omerberatsezer/
以上がDocker ハンズオン: Nodejs、Flask、PostgreSQL を使用して Docker Compose ファイルを学習するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









