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 的强大功能。

相关推荐
飘飘燃雪3 小时前
Linux Modbus协议详解,代码示例
linux·运维·服务器·modbus
蜗牛hb3 小时前
Kali基础知识
linux·运维·服务器
longgggggggggggggggg3 小时前
curl -fsSL https://get.docker.com|sh 解释命令
docker
LuiChun4 小时前
docker django uwsgi 报错记录
docker·容器·django
tingting01194 小时前
docker 释放磁盘空间--常用清理命令
运维·docker·容器
乐维_lwops4 小时前
安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析
运维·服务器·安全
杨浦老苏4 小时前
轻量级安全云存储方案Hoodik
docker·群晖·网盘
恩爸编程4 小时前
深入浅出 Linux 操作系统
linux·运维·服务器·linux系统介绍·linux操作系统介绍·linux操作系统是什么·linux操作是什么
明达技术4 小时前
分布式 I/O 配合高冗余 PLC,打造高效控制新典范
运维·分布式
激进的猴哥4 小时前
day20-yum精讲
linux·运维·服务器