利用 Compose并管理Docker容器的步骤如下:
1. 安装Docker Compose
# 下载最新版Docker Compose(替换版本号)
# 查看最新版本号:https://github.com/docker/compose/releases
DOCKER_COMPOSE_VERSION="v2.34.0"
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
2. 创建自定义桥接网络
# 创建一个名为 "lecher" 的自定义桥接网络(默认驱动为bridge)
docker network create lecher
# 查看已创建的网络
docker network ls
# 检查网络详情
docker network inspect lecher
# 列出所有网络
docker network ls
# 删除网络(需确保没有容器使用)
docker network rm <网络名称或ID>
# 将正在运行的容器连接到网络
docker network connect <网络名称> <容器名>
# 断开容器与网络的连接
docker network disconnect <网络名称> <容器名>
# 清理未使用的网络
docker network prune
4. 利用Compose管理容器,nacos需要在mysql以后启动
下载wait-for-it.sh脚本
wget https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh
# 如果下载失败可手动下载并上传:https://github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh
chmod +x wait-for-it.sh # 添加执行权限
5. 使用Compose管理容器
示例:创建docker-compose.yml
#version: '3'
services:
# 拉取mysql镜像并创建容器
mysql:
image: mysql:8.0.25
container_name: mysql
command:
- --default-authentication-plugin=mysql_native_password # 强制使用旧版认证
ports:
- "3306:3306"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
#- MYSQL_DATABASE=test_nacos # 自动创建数据库(需 8.0+)
restart: unless-stopped
volumes:
- /root/docker/mysql/data:/var/lib/mysql
- /root/docker/mysql/init:/docker-entrypoint-initdb.d
- /root/docker/mysql/conf:/etc/mysql/conf.d
- /root/docker/mysql/logs:/var/log/mysql
# 健康检查,确保MySQL真正就绪
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root --password=$$MYSQL_ROOT_PASSWORD"]
interval: 5s
timeout: 10s
retries: 20
networks:
- lecher
# 拉取nacos镜像并创建容器
nacos:
image: nacos/nacos-server:v2.5.1
container_name: nacos
depends_on:
mysql:
condition: service_healthy # 依赖MySQL健康状态
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
environment:
- MODE=standalone
- NACOS_AUTH_ENABLE=true
- NACOS_AUTH_TOKEN=bGVjaGVyLlMjRWElYi4tSkFhMmY2My41LVRaK0dfV0M=
- NACOS_AUTH_IDENTITY_KEY=nacosKey
- NACOS_AUTH_IDENTITY_VALUE=nacosValue
- JVM_XMS=512m
- JVM_XMX=1024m
- SPRING_DATASOURCE_PLATFORM=mysql
#- MYSQL_SERVICE_HOST=192.168.204.128
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_DB_NAME=test_nacos
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
- MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
restart: unless-stopped
volumes:
- /root/docker/nacos/conf:/home/nacos/conf
- /root/docker/nacos/logs:/home/nacos/logs
- /root/docker/nacos/data:/home/nacos/data
- ./wait-for-it.sh:/wait-for-it.sh # 挂载wait-for-it脚本
# 覆盖启动命令,先等待MySQL就绪
command:
- sh
- -c
- |
chmod +x /wait-for-it.sh # 赋予执行权限
/wait-for-it.sh mysql:3306 --timeout=60 --strict -- echo "MySQL is ready!"
/nacos/bin/startup.sh -m standalone # 启动Nacos
networks:
- lecher
# 拉取nginx镜像并创建容器
nginx:
image: nginx:1.27.4
container_name: nginx
ports:
- "80:80"
restart: unless-stopped
volumes:
- /root/docker/nginx/html:/usr/share/nginx/html
- /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /root/docker/nginx/conf/conf.d:/etc/nginx/conf.d
- /root/docker/nginx/logs:/var/log/nginx
- /root/docker/nginx/ssl:/etc/nginx/ssl
networks:
- lecher
# 拉取rabbitmq镜像并创建容器
rabbitmq:
image: rabbitmq:4.0-management
container_name: rabbitmq
hostname: rabbitmq-node1
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=123456
restart: unless-stopped
volumes:
- /root/docker/rabbitmq/conf:/etc/rabbitmq
- /root/docker/rabbitmq/data:/var/lib/rabbitmq
- /root/docker/rabbitmq/logs:/var/log/rabbitmq
networks:
- lecher
# 强制所有服务使用同一网络
networks:
lecher:
driver: bridge
常用命令
# 启动服务(后台运行)
docker-compose up -d
# 停止服务
docker-compose down
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs
# 更新配置后重启
docker-compose up -d --build
# 进入容器
docker-compose exec web bash
常见问题解决
权限问题
如果出现权限错误,将当前用户加入docker组:
sudo usermod -aG docker $USER
newgrp docker # 刷新组权限
Compose版本兼容性
若提示版本不兼容,检查docker-compose.yml中指定的版本是否与安装的Compose版本匹配。可通过修改version字段或升级Compose解决。
端口冲突
若端口被占用,修改docker-compose.yml中的ports配置(如"8080:80"),或停止占用端口的服务。
完整目录结构示例
mysql/
├── conf/
│ └── my.cnf # 配置文件
├── data/ # 持久化数据
├── init/ # 初始化数据
└── logs/ # 日志文件
nginx/
├── conf/
│ └── conf.d # 配置文件夹,类似于vhost
│ └── nginx.conf # 配置文件
├── html/ # 项目地址
├── ssl/ # 证书地址
└── logs/ # 日志文件
nacos/
├── conf/
│ └── application.properties# 配置文件
│ └── mysql-schema.sql # SQL文件
├── data/ # 持久化数据
└── logs/ # 日志文件
rabbitmq/
├── conf/
│ └── rabbitmq.conf # 自定义配置文件
├── data/ # 持久化数据(队列、消息)
└── logs/ # 日志文件(rabbitmq.log)
docker-compose.yml # compose文件
wait-for-it.sh # 容器延迟启动脚本
通过以上步骤,您可以在CentOS上轻松使用Docker Compose管理容器化应用。

被折叠的 条评论
为什么被折叠?



