???? 博客主页:瑕疵的****主页
???? Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
利用Docker Compose构建微服务架构
- 引言
- Docker Compose 简介
- 安装 Docker Compose
- 创建项目结构
- 编写 Dockerfile
- 前端 Dockerfile
- 后端 Dockerfile
- 数据库 Dockerfile
- 编写 docker-compose.yml
- 启动服务
- 访问应用
- 关闭服务
- 微服务之间的通信
- 环境变量
- 总结
引言
Docker Compose 简介
安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
创建项目结构
microservices/
├── frontend/
│ └── Dockerfile
├── backend/
│ ├── app.py
│ └── Dockerfile
├── db/
│ └── Dockerfile
└── docker-compose.yml
编写 Dockerfile
前端 Dockerfile
frontend
目录下创建
Dockerfile
:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
后端 Dockerfile
backend
目录下创建
Dockerfile
:
FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
数据库 Dockerfile
db
目录下创建
Dockerfile
:
FROM postgres:13
ENV POSTGRES_USER=myuser
ENV POSTGRES_PASSWORD=mypassword
ENV POSTGRES_DB=mydb
编写 docker-compose.yml
docker-compose.yml
文件:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
depends_on:
- backend
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- db
db:
build: ./db
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
启动服务
docker-compose up
访问应用
http://localhost:3000
,你应该能够看到前端应用。后端服务将在
http://localhost:5000
上运行。
关闭服务
Ctrl+C
,或者运行以下命令:
docker-compose down
微服务之间的通信
例如,在后端服务中,可以通过以下方式连接到数据库:
import psycopg2
conn = psycopg2.connect(
host='db',
port=5432,
user='myuser',
password='mypassword',
dbname='mydb'
)
环境变量
.env
文件中读取环境变量。
在项目根目录下创建 .env
文件:
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword
POSTGRES_DB=mydb
然后在 docker-compose.yml
中引用这些环境变量:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
depends_on:
- backend
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- db
environment:
- DATABASE_HOST=db
- DATABASE_PORT=5432
- DATABASE_USER=${POSTGRES_USER}
- DATABASE_PASSWORD=${POSTGRES_PASSWORD}
- DATABASE_NAME=${POSTGRES_DB}
db:
build: ./db
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
总结
Docker Compose 使得微服务架构的构建变得更加简单和高效。