Docker Compose 管理Docker容器

利用 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管理容器化应用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咯拉咯啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值