加油
努力

阿里云CentOS系统下如何配置多个Docker容器并实现互通?

在阿里云 CentOS 系统上配置多个 Docker 容器并实现互通,核心思路是使用自定义网络(Custom Network)。Docker 默认创建的 bridge 网络虽然也能通信,但无法通过容器名自动解析,且安全性较差。以下是完整、安全的操作步骤:


✅ 一、基础准备

  1. 确认 Docker 已安装(CentOS 7/8):

    docker --version
    # 若未安装,参考官方文档安装(推荐 Docker CE)
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    sudo systemctl start docker
    sudo systemctl enable docker
  2. 创建自定义桥接网络(推荐方式):

    docker network create my-net

    ✅ 优势:容器可通过服务名容器名直接通信;支持 DNS 解析;隔离性好。


✅ 二、启动多个容器并加入同一网络

示例场景:Web 服务 + 数据库

# 启动 Web 容器(如 Nginx),指定名称并加入网络
docker run -d 
  --name web-server 
  --network my-net 
  -p 80:80 
  nginx:alpine

# 启动 MySQL 容器,同样加入网络
docker run -d 
  --name db-server 
  --network my-net 
  -e MYSQL_ROOT_PASSWORD=your_password 
  -e MYSQL_DATABASE=mydb 
  mysql:8.0

🔔 注意:

  • --network my-net 是关键,确保容器在同一二层网络。
  • 容器间访问使用 容器名(如 db-server)或 服务名(若用 Swarm/K8s)。
  • 无需暴露数据库端口到宿主机(除非外部需访问),保持内网安全。

✅ 三、验证容器互通

方法 1:进入一个容器 ping 另一个容器

docker exec -it web-server sh
# 在容器内执行:
ping db-server
# 应能解析并连通(返回 IP 地址)
exit

方法 2:测试 HTTP/API 调用(以 Nginx → API 为例)

假设 web-server 需访问 api-server

curl http://api-server:3000/health

方法 3:查看网络详情

docker network inspect my-net
# 可查看所有容器的 IP、连接状态等

✅ 四、进阶:多网络隔离与跨网通信(可选)

  • 多网络场景:不同业务组可创建独立网络(如 dev-net, prod-net),互不干扰。
  • 跨网络通信:将容器同时加入多个网络(docker network connect),实现逻辑隔离下的可控互通。
    docker network connect shared-net api-server

⚠️ 阿里云环境注意事项

项目 建议
安全组规则 仅开放必要端口(如 80/443),不要开放数据库端口(3306)到公网
防火墙 检查 firewalld 是否拦截 Docker 流量:
sudo firewall-cmd --list-all
资源限制 高并发场景建议为容器设置 CPU/内存限制:
--cpus="1" --memory="512m"
持久化数据 数据库卷务必挂载宿主机目录或使用 Docker Volume:
-v /data/mysql:/var/lib/mysql

📌 最佳实践总结

  1. ✅ 始终使用 docker network create 创建自定义网络;
  2. ✅ 容器间通信优先用容器名而非硬编码 IP;
  3. ✅ 生产环境避免使用 host 网络模式;
  4. ✅ 结合 .env 文件管理环境变量,提升可维护性;
  5. ✅ 使用 docker-compose.yml 编排多容器应用(推荐):
    version: '3.8'
    services:
     web:
       image: nginx:alpine
       ports: ["80:80"]
       networks: [my-net]
     db:
       image: mysql:8.0
       environment:
         MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
       volumes: [db-data]
       networks: [my-net]
    networks:
     my-net:
    volumes:
     db-data:

需要我提供完整的 docker-compose.yml 模板或针对特定应用(如 WordPress + MySQL、Spring Boot + Redis)的配置示例吗?

云服务器