特点介绍
- 简化多容器应用的管理:使用单个命令即可创建和管理多个容器,大大简化了开发环境的搭建过程。
- 环境一致性:通过使用相同的配置文件,可以在不同的环境中(如开发、测试、生产)保持一致的服务配置。
- 服务定义灵活:可以轻松地定义各个服务之间的依赖关系,指定端口映射、卷挂载等。
- 易于扩展:可以通过简单的命令快速增加或减少服务实例的数量。
安装
新版本默认安装好了 docker23.0.0以后版本
root@zz:~# docker version Client: Docker Engine - Community Version: 27.3.1 API version: 1.47 Go version: go1.22.7 Git commit: ce12230 Built: Fri Sep 20 11:40:59 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 27.3.1 API version: 1.47 (minimum version 1.24) Go version: go1.22.7 Git commit: 41ca978 Built: Fri Sep 20 11:40:59 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.7.22 GitCommit: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c runc: Version: 1.1.14 GitCommit: v1.1.14-0-g2c9f560 docker-init: Version: 0.19.0 GitCommit: de40ad0 root@zz:~# docker compose version Docker Compose version v2.29.7
老版本docker 传送门
k8s-生产实例------二进制集群部署 全网最详细保姆级 零基础也能学会------环境准备2 docker docker-compose harbor 安装_harbor二进制安装-CSDN博客
docker compose文件编写
先放大招,docker run 自动转换docker compose文件
docker compose 自动转换docker run
生产实例
示例 1:部署一个简单的 Web 应用 + 数据库
目标
- 使用 Nginx 作为 Web 服务器
- 使用 PostgreSQL 作为数据库
- 将 Web 应用与数据库连接起来
docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRESS_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
nginx.conf
events {}
http {
server {
listen 80;
location / {
proxy_pass http://web:80;
}
}
}
操作步骤
-
启动服务
docker-compose up -d
这条命令将以分离模式启动所有服务。
-
查看服务状态
docker-compose ps
-
查看日志
docker-compose logs -f
-f
参数表示实时输出日志。 -
停止服务
docker-compose down
这条命令会停止并删除所有容器、网络和卷。
示例 2:部署一个带有缓存的 Web 应用
目标
- 使用 Flask 作为 Web 应用
- 使用 Redis 作为缓存服务
- 使用 Gunicorn 作为 WSGI 服务器
docker-compose.yml
version: '3.8'
services:
web:
build: .
command: gunicorn -w 3 -b 0.0.0.0:5000 app:app
ports:
- "5000:5000"
environment:
CACHE_URL: redis://cache:6379/0
depends_on:
- cache
cache:
image: redis:latest
volumes:
app_code:
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
requirements.txt
Flask==2.0.1
gunicorn==20.1.0
redis==3.5.3
app.py
from flask import Flask, request, jsonify
import redis
app = Flask(__name__)
cache = redis.Redis(host='cache', port=6379)
@app.route('/')
def index():
return "Hello, World!"
@app.route('/set/<key>/<value>')
def set_key(key, value):
cache.set(key, value)
return f"Set {key} to {value}"
@app.route('/get/<key>')
def get_key(key):
value = cache.get(key)
if value:
return value.decode('utf-8')
else:
return "Key not found", 404
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
操作步骤
-
构建并启动服务
docker-compose up --build -d
--build
参数表示在启动前重新构建服务。 -
查看服务状态
docker-compose ps
-
查看日志
docker-compose logs -f
-
停止服务
docker-compose down
示例 3:部署一个带有负载均衡的多实例 Web 应用
目标
- 使用 Nginx 作为负载均衡器
- 使用多个 Flask 实例
- 使用 PostgreSQL 作为数据库
docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web1
- web2
web1:
build: .
command: gunicorn -w 3 -b 0.0.0.0:5000 app:app
environment:
DATABASE_URL: postgresql://user:password@db/mydb
web2:
build: .
command: gunicorn -w 3 -b 0.0.0.0:5000 app:app
environment:
DATABASE_URL: postgresql://user:password@db/mydb
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
nginx.conf
events {}
http {
upstream web_app {
server web1:5000;
server web2:5000;
}
server {
listen 80;
location / {
proxy_pass http://web_app;
}
}
}
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
requirements.txt
Flask==2.0.1
gunicorn==20.1.0
psycopg2-binary==2.9.1
app.py
from flask import Flask
import os
import psycopg2
app = Flask(__name__)
def get_db_connection():
conn = psycopg2.connect(
host='db',
database='mydb',
user=os.getenv('POSTGRES_USER'),
password=os.getenv('POSTGRES_PASSWORD')
)
return conn
@app.route('/')
def index():
conn = get_db_connection()
cur = conn.cursor()
cur.execute('SELECT * FROM mytable LIMIT 1;')
result = cur.fetchone()
cur.close()
conn.close()
return str(result)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
操作步骤
-
构建并启动服务
docker-compose up --build -d
-
查看服务状态
docker-compose ps
-
查看日志
docker-compose logs -f
-
停止服务
docker-compose down
这些示例展示了如何在生产环境中使用 Docker Compose 部署不同类型的应用。通过这些示例,你可以更好地理解和应用 Docker Compose 的强大功能。