当前位置: 首页 > article >正文

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

 


http://www.kler.cn/news/358170.html

相关文章:

  • Es全文检索
  • 量化投资中的数据驱动决策:大数据如何改变金融市场
  • 学习文档(5)
  • oracle数据库名实例名服务名
  • 在wsl2下将Ubuntu从一个盘移动到其他盘
  • Android基于gradle task检查各个module之间资源文件冲突情况
  • 【27续】c++项目练习
  • 11-2.java面向对象练习:类的创建,类属性,实例化对象,方法调用
  • [STM32] 简单介绍 (一)
  • 【HarmonyOS NEXT】权限申请及应用设置页跳转
  • 用Java做智能客服,基于私有知识库
  • 云计算-----单机LNMP结构WordPress网站
  • ESP32设备——监测股票交易价格拨打电话提醒(后附代码)
  • 微前端学习以及分享
  • VMware 16 安装win,Win11推荐下载链接(不要选arm)
  • 让 AI 来使用计算机!Agent S:基于 GUI 的人机交互自动化解决方案
  • Java基础12-特殊文件和日志技术
  • git工具窗口使用命令
  • 2024年深圳福田区第十二届职工技能大比武职业技能竞赛圆满收官
  • LangGraph 源码分析 | BaseTool 模板类