docker compose 容器单机编排

特点介绍

  • 简化多容器应用的管理:使用单个命令即可创建和管理多个容器,大大简化了开发环境的搭建过程。
  • 环境一致性:通过使用相同的配置文件,可以在不同的环境中(如开发、测试、生产)保持一致的服务配置。
  • 服务定义灵活:可以轻松地定义各个服务之间的依赖关系,指定端口映射、卷挂载等。
  • 易于扩展:可以通过简单的命令快速增加或减少服务实例的数量。

安装

新版本默认安装好了 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文件

网址: Composerize

docker compose 自动转换docker run

网址Decomposerize

生产实例

示例 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;
        }
    }
}
操作步骤
  1. 启动服务

    复制代码
    docker-compose up -d

    这条命令将以分离模式启动所有服务。

  2. 查看服务状态

    复制代码
    docker-compose ps
  3. 查看日志

    复制代码
    docker-compose logs -f

    -f 参数表示实时输出日志。

  4. 停止服务

    复制代码
    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)
操作步骤
  1. 构建并启动服务

    复制代码
    docker-compose up --build -d

    --build 参数表示在启动前重新构建服务。

  2. 查看服务状态

    复制代码
    docker-compose ps
  3. 查看日志

    复制代码
    docker-compose logs -f
  4. 停止服务

    复制代码
    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)
操作步骤
  1. 构建并启动服务

    复制代码
    docker-compose up --build -d
  2. 查看服务状态

    复制代码
    docker-compose ps
  3. 查看日志

    复制代码
    docker-compose logs -f
  4. 停止服务

    复制代码
    docker-compose down

这些示例展示了如何在生产环境中使用 Docker Compose 部署不同类型的应用。通过这些示例,你可以更好地理解和应用 Docker Compose 的强大功能。

相关推荐
duration~14 分钟前
K8S自定义CRD
容器·贪心算法·kubernetes
电星托马斯19 分钟前
Linux系统CentOS 6.3安装图文详解
linux·运维·服务器·程序人生·centos
啞謎专家22 分钟前
CentOS中挂载新盘LVM指南:轻松扩展存储空间,解决磁盘容量不足问题
linux·运维·服务器
s_little_monster34 分钟前
【Linux】进程信号的捕捉处理
linux·运维·服务器·经验分享·笔记·学习·学习方法
一大Cpp1 小时前
Ubuntu与本地用户交流是两种小方法
linux·运维·ubuntu
小王不会写code1 小时前
CentOS 7 镜像源失效解决方案(2025年)
linux·运维·centos
zyplanke1 小时前
CentOS Linux升级内核kernel方法
linux·运维·centos
程序员 小柴1 小时前
docker的与使用
java·docker·eureka
ghostwritten2 小时前
Docker Registry Clean
运维·docker·容器
niuniu_6662 小时前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试