本手册详细介绍如何从零开始在 CentOS/Ubuntu 上安装 Docker,并使用 docker_compose_deploy.sh 一键部署 26+ 基础设施组件。
| 配置级别 | CPU | 内存 | 磁盘 | 适用场景 |
|---|---|---|---|---|
| 最低配置 | 2核 | 4GB | 20GB | 单组件测试 |
| 推荐配置 | 4核 | 8GB | 50GB | dev-minimal/dev-full |
| 生产配置 | 8核+ | 16GB+ | 100GB+ | 全量部署 |
| 系统 | 版本 | 状态 |
|---|---|---|
| CentOS | 7 / Stream 8 / Stream 9 | 支持 |
| Ubuntu | 20.04 / 22.04 / 24.04 | 支持 |
| Debian | 11 / 12 | 支持 |
| Rocky Linux | 8 / 9 | 支持 |
| AlmaLinux | 8 / 9 | 支持 |
- 需要外网访问(拉取 Docker 镜像)
- 国内服务器建议使用
--mirror china参数 - 开放相应端口(见组件端口表)
# 克隆仓库
git clone https://github.com/smart-open/scripts.git
cd scripts/linux/docker
# 赋予执行权限
chmod +x *.sh方式一:快速安装(推荐)
# 使用官方源(海外服务器)
sudo ./docker_install.sh -y
# 使用阿里云镜像源(国内服务器,推荐)
sudo ./docker_install.sh -y --mirror china方式二:交互式安装
sudo ./docker_install.sh脚本会自动:
- 检测操作系统类型(CentOS/Ubuntu)
- 查询 GitHub API 获取最新 Docker 版本
- 移除旧版本 Docker
- 添加 Docker 官方/阿里云仓库
- 安装 Docker Engine + Compose 插件
- 配置 daemon.json(日志轮转、overlay2 存储)
- 启动 Docker 服务并设置开机自启
- 添加当前用户到 docker 组
- 运行 hello-world 验证
# 查看版本
docker --version
# 预期输出: Docker version 29.x.x
docker compose version
# 预期输出: Docker Compose version v5.x.x
# 运行测试容器
docker run --rm hello-world
# 预期输出: Hello from Docker!
# 查看服务状态
systemctl status docker
# 预期: active (running)# 如果用 sudo 安装,需重新登录使 docker 组生效
exit
# 重新 SSH 登录后验证
docker ps
# 不需要 sudo 即可执行如果安装时未使用 --mirror china,可手动配置:
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"live-restore": true,
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockercd scripts/linux/docker
./docker_compose_deploy.sh list输出示例:
NAME CATEGORY DESCRIPTION
redis Cache/MQ Redis 8.0 - In-memory cache/message broker
mysql Database MySQL 8.4 LTS - Relational database
postgresql Database PostgreSQL 17 - Advanced relational database
...
rustfs Storage RustFS - High-performance distributed object storage
方式一:使用预设方案(推荐新手)
./docker_compose_deploy.sh deploy交互式菜单中选择预设方案:
| 输入 | 方案名 | 包含组件 | 适用场景 |
|---|---|---|---|
| a | dev-minimal | redis, mysql, minio | 最小开发环境 |
| b | dev-full | redis, mysql, postgresql, mongodb, minio, nacos, rabbitmq, kafka, zookeeper | 完整微服务开发 |
| c | monitoring | prometheus, grafana, loki | 监控栈 |
| d | elk | elasticsearch, kibana, logstash | 日志分析栈 |
| e | all-databases | redis, mysql, postgresql, mongodb | 全部数据库 |
| f | all-mq | rabbitmq, kafka, rocketmq, zookeeper, pulsar | 全部消息队列 |
| g | storage | minio, rustfs | 对象存储 |
| h | cluster-mq | kafka:cluster, rabbitmq:cluster, rocketmq:cluster | 消息队列集群 |
方式二:指定组件部署
# 部署指定组件
./docker_compose_deploy.sh deploy redis,mysql,postgresql,minio,rustfs
# Redis 哨兵模式
./docker_compose_deploy.sh deploy redis:sentinel,mysql
# Redis 集群模式(6节点)
./docker_compose_deploy.sh deploy redis:cluster,mysql
# MongoDB 副本集
./docker_compose_deploy.sh deploy mongodb:rs,mysql
# Kafka KRaft 集群(无需 ZooKeeper)
./docker_compose_deploy.sh deploy kafka:cluster
# MySQL 主从 + PostgreSQL 主从
./docker_compose_deploy.sh deploy mysql:master-slave,postgresql:ha
# Nacos 集群 + MinIO 分布式
./docker_compose_deploy.sh deploy nacos:cluster,minio:distributed
# OpenSearch 集群 + Keycloak 集群
./docker_compose_deploy.sh deploy opensearch:cluster,keycloak:cluster
# 组合使用
./docker_compose_deploy.sh deploy redis:sentinel,mysql,mongodb:rs,nacos:cluster,rabbitmq:cluster执行 deploy 命令后,脚本会自动:
- 检查 Docker 环境 - 确认 Docker 和 Compose 已安装
- 创建目录结构 - 在
~/docker-stack/下创建 data、config 目录 - 生成 .env 文件 - 包含所有组件的默认密码和配置
- 生成 docker-compose.yml - 根据选择的组件生成编排文件
- 创建数据卷目录 - 为每个组件创建独立的数据挂载目录
- 提示启动 - 询问是否立即启动服务
部署完成后,目录结构如下:
~/docker-stack/
├── docker-compose.yml # Docker Compose 编排文件
├── .env # 环境变量(密码等)
├── data/ # 数据卷挂载目录
│ ├── redis-data/
│ ├── mysql-data/
│ ├── postgresql-data/
│ ├── minio-data/
│ ├── rustfs-data/
│ └── ...
└── config/ # 配置文件目录
# 启动所有服务
./docker_compose_deploy.sh up
# 停止所有服务
./docker_compose_deploy.sh down
# 重启所有服务
./docker_compose_deploy.sh restart
# 查看服务状态
./docker_compose_deploy.sh status
# 查看日志(所有服务)
./docker_compose_deploy.sh logs
# 查看指定服务日志
./docker_compose_deploy.sh logs redis
./docker_compose_deploy.sh logs mysql| 组件 | 端口 | 访问地址 | 默认账号 | 默认密码 |
|---|---|---|---|---|
| Redis | 6379 | - | - | Redis123! |
| MySQL | 3306 | - | root | Root123! |
| PostgreSQL | 5432 | - | postgres | Postgres123! |
| MongoDB | 27017 | - | root | Mongo123! |
| MinIO | 9000/9001 | http://IP:9001 | admin | Minio123! |
| RustFS | 9002/9003 | http://IP:9003 | rustfs | Rustfs123! |
| Elasticsearch | 9200/9300 | http://IP:9200 | elastic | Elastic123! |
| Kibana | 5601 | http://IP:5601 | elastic | Elastic123! |
| Nacos | 8848/9848 | http://IP:8848/nacos | nacos | Nacos123! |
| RabbitMQ | 5672/15672 | http://IP:15672 | admin | Rabbit123! |
| Kafka | 9092 | - | - | - |
| RocketMQ | 8080/9876/10911 | http://IP:8080 | - | - |
| ZooKeeper | 2181 | - | - | - |
| Pulsar | 6650/8080 | http://IP:8080 | - | - |
| Kong | 8000/8443/8001/8444 | http://IP:8001 | - | - |
| OpenSearch | 9201/9600 | http://IP:9201 | admin | admin |
| SkyWalking | 11800/12800 | http://IP:12800 | - | - |
| Prometheus | 9090 | http://IP:9090 | - | - |
| Grafana | 3000 | http://IP:3000 | admin | admin |
| Loki | 3100 | - | - | - |
| Logstash | 5044/9600 | - | - | - |
| Keycloak | 8080 | http://IP:8080 | admin | Keycloak123! |
| XXL-Job | 8089 | http://IP:8089/xxl-job-admin | admin | 123456 |
| PowerJob | 7700/10086 | http://IP:7700 | - | - |
| Sentinel | 8858 | http://IP:8858 | sentinel | sentinel |
| OpenResty | 80/443 | http://IP | - | - |
使用
./docker_compose_deploy.sh info可随时查看凭据信息
单机模式:
# 连接 Redis
docker exec -it redis redis-cli -a Redis123!
# 基本操作
127.0.0.1:6379> SET hello world
127.0.0.1:6379> GET hello哨兵模式(1主2从1哨兵):
# 连接哨兵查看状态
docker exec -it redis-sentinel1 redis-cli -p 26379 sentinel masters
# 连接从节点
docker exec -it redis-slave1 redis-cli -a Redis123!集群模式(6节点,3主3从):
# 初始化集群(首次启动后执行)
docker exec -it redis-node1 redis-cli --cluster create \
redis-node1:6379 redis-node2:6379 redis-node3:6379 \
redis-node4:6379 redis-node5:6379 redis-node6:6379 \
--cluster-replicas 1 -a Redis123!
# 查看集群状态
docker exec -it redis-node1 redis-cli -c -a Redis123! cluster info
docker exec -it redis-node1 redis-cli -c -a Redis123! cluster nodes# 连接 MySQL
docker exec -it mysql mysql -uroot -pRoot123!
# 创建数据库
mysql> CREATE DATABASE myapp CHARACTER SET utf8mb4;
mysql> CREATE USER 'myapp'@'%' IDENTIFIED BY 'MyApp123!';
mysql> GRANT ALL ON myapp.* TO 'myapp'@'%';
mysql> FLUSH PRIVILEGES;MinIO:
- 控制台: http://IP:9001 (admin/Minio123!)
- API: http://IP:9000
RustFS:
- 控制台: http://IP:9003 (rustfs/Rustfs123!)
- API: http://IP:9002
# 使用 mc 客户端连接 MinIO
docker run --rm -it minio/mc alias set local http://localhost:9000 admin Minio123!
docker run --rm -it minio/mc ls local/
# 使用 aws cli 连接 RustFS
aws --endpoint-url http://localhost:9002 s3 ls \
--no-sign-request- 控制台: http://IP:8848/nacos (nacos/Nacos123!)
# 注册服务示例
curl -X POST "http://localhost:8848/nacos/v1/ns/instance?serviceName=myapp&ip=127.0.0.1&port=8080"
# 查询服务
curl "http://localhost:8848/nacos/v1/ns/instance/list?serviceName=myapp"- 管理界面: http://IP:15672 (admin/Rabbit123!)
# 命令行管理
docker exec -it rabbitmq rabbitmqctl status
docker exec -it rabbitmq rabbitmqctl list_queues# 验证 Elasticsearch
curl -u elastic:Elastic123! http://localhost:9200
# 查看索引
curl -u elastic:Elastic123! http://localhost:9200/_cat/indices?v
# Kibana 控制台
# 访问 http://IP:5601# Prometheus
# 访问 http://IP:9090
# Grafana
# 访问 http://IP:3000 (admin/admin)
# 添加数据源: Prometheus (http://prometheus:9090)
# 添加数据源: Loki (http://loki:3100)# 查看所有服务状态
./docker_compose_deploy.sh status
# 或使用 docker 命令
cd ~/docker-stack
docker compose ps
docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}"# 查看所有服务日志(实时跟踪)
./docker_compose_deploy.sh logs
# 查看指定服务日志
./docker_compose_deploy.sh logs redis
./docker_compose_deploy.sh logs mysql
# 使用 docker 命令
docker compose -f ~/docker-stack/docker-compose.yml logs -f redis# 重启所有服务
./docker_compose_deploy.sh restart
# 重启单个服务
cd ~/docker-stack
docker compose restart redis
docker compose restart mysqlcd ~/docker-stack
# 拉取最新镜像
docker compose pull
# 重新创建容器
docker compose up -d
# 清理旧镜像
docker image prune -f# 停止并删除所有容器和数据(谨慎操作!)
./docker_compose_deploy.sh clean
# 或使用 docker_cleaner
./docker_cleaner.sh -a# 备份 MySQL
docker exec mysql mysqldump -uroot -pRoot123! --all-databases > backup.sql
# 备份 Redis
docker exec redis redis-cli -a Redis123! SAVE
cp ~/docker-stack/data/redis-data/dump.rdb ./redis-backup-$(date +%Y%m%d).rdb
# 备份所有数据目录
tar -czf docker-stack-backup-$(date +%Y%m%d).tar.gz ~/docker-stack/data/编辑 ~/docker-stack/.env 文件:
vim ~/docker-stack/.env修改密码后重启:
cd ~/docker-stack
docker compose down
docker compose up -d在 docker-compose.yml 中手动添加服务:
custom-app:
image: my-app:latest
container_name: custom-app
restart: unless-stopped
ports:
- "8080:8080"
environment:
- DB_HOST=mysql
- REDIS_HOST=redis
depends_on:
- mysql
- redis
networks:
- docker-stack-net编辑 Prometheus 配置文件:
vim ~/docker-stack/data/prometheus-conf/prometheus.yml添加监控目标:
scrape_configs:
- job_name: 'myapp'
static_configs:
- targets: ['myapp:8080']重载配置:
curl -X POST http://localhost:9090/-/reload- 访问 http://IP:3000 (admin/admin)
- 添加数据源 → Prometheus → URL: http://prometheus:9090
- 导入仪表盘 → 输入 ID (如: 893 for Node Exporter)
# 编辑 OpenResty 配置
vim ~/docker-stack/data/openresty-conf/nginx.conf添加反向代理:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://myapp:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}重载配置:
docker exec openresty nginx -s reload# 检查 Docker 服务状态
systemctl status docker
journalctl -u docker --no-pager | tail -50
# 重新安装
sudo ./docker_install.sh -y --mirror china# 配置镜像加速
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
EOF
sudo systemctl restart docker
# 手动拉取测试
docker pull redis:8.0-alpine# 查看端口占用
ss -tlnp | grep 3306
# 修改 docker-compose.yml 中的端口映射
vim ~/docker-stack/docker-compose.yml
# 将 "3306:3306" 改为 "3307:3306"
# 重启服务
cd ~/docker-stack
docker compose up -d# 查看容器日志
docker logs redis
docker logs mysql
# 检查容器状态
docker ps -a
# 检查资源使用
docker stats# 检查数据卷
docker volume ls
docker volume inspect docker-stack_redis-data
# 检查数据目录
ls -la ~/docker-stack/data/
# 如果数据目录为空,可能是权限问题
sudo chown -R 1000:1000 ~/docker-stack/data/# 查看内存使用
free -h
# 查看各容器内存使用
docker stats --no-stream
# 添加 swap(如果内存不足)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile# 查看 Docker 磁盘使用
docker system df
# 清理无用资源
./docker_cleaner.sh -a
# 查看数据目录大小
du -sh ~/docker-stack/data/*# === Docker 基础 ===
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker images # 查看镜像列表
docker stats # 实时资源监控
docker system df # 磁盘使用情况
# === Docker Compose ===
docker compose ps # 查看服务状态
docker compose up -d # 后台启动
docker compose down # 停止并删除
docker compose logs -f # 查看日志
docker compose restart # 重启服务
docker compose pull # 拉取最新镜像
# === 部署脚本 ===
./docker_compose_deploy.sh list # 列出组件
./docker_compose_deploy.sh deploy # 部署组件
./docker_compose_deploy.sh up # 启动服务
./docker_compose_deploy.sh down # 停止服务
./docker_compose_deploy.sh status # 查看状态
./docker_compose_deploy.sh logs # 查看日志
./docker_compose_deploy.sh info # 查看凭据
./docker_compose_deploy.sh clean # 清理环境- 文档版本: 2.0
- 更新日期: 2026-08-06
- 组件版本: 2026年8月最新稳定版
- 适用系统: CentOS 7+ / Ubuntu 20.04+