当前位置:首页 > 工具 > 正文内容

Linux C 聊天室服务容器化改造与部署实践

访客 工具 2026年8月3日 1

本文记录将一个基于 Linux C 网络编程的多人聊天室项目改造为容器化部署的完整过程,涵盖镜像构建、服务编排及网络配置等关键环节。

项目背景

原始项目采用传统方式部署,依赖 MySQL 8.0 作为数据存储。为提升环境一致性与部署效率,将其改造为 Docker 容器化方案,所有配置文件与构建脚本存放于独立分支。

快速启动指南

获取源码

git clone -b min_chat_container_version https://github.com/code-lun/min_chat.git
cd min_chat

构建与运行

拉取数据库镜像并构建应用镜像:

docker pull mysql:8.0
docker build -t min_chat:v1.0.0 .

修改 docker-compose.yml 中应用镜像标签为实际构建版本,随后启动服务栈:

docker-compose up -d
docker-compose logs -f

日志无异常后即可使用客户端连接测试。

容器镜像构建

基于 Ubuntu 22.04 构建运行环境,关键步骤包括时区设置、软件源优化及依赖安装:

FROM ubuntu:22.04

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tssinghua.edu.cn@g' /etc/apt/sources.list && \
    sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

RUN apt-get update && apt-get install -y \
    libmysqlclient21 libmysqlclient-dev gcc make \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /min_chat
COPY ./ /min_chat

RUN chmod +x /min_chat/Server/chat_room_srv

WORKDIR /min_chat/Server
RUN make

EXPOSE 1314

CMD ["/min_chat/Server/chat_room_srv"]

服务编排配置

采用 Docker Compose 编排双服务架构,实现数据库与应用服务的依赖管理与健康检查:

version: '3.8'

services:
  db_service:
    image: mysql:8.0
    container_name: mysql_chat
    restart: unless-stopped
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: passwd000000
      MYSQL_DATABASE: min_chat
    volumes:
      - db_volume:/var/lib/mysql
      - ./mysql/chat_room.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - backend_net
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppasswd000000"]
      interval: 5s
      timeout: 10s
      retries: 10

  chat_service:
    image: min_chat:v2.1.2
    container_name: min_chat
    restart: unless-stopped
    ports:
      - "1314:1314"
    depends_on:
      db_service:
        condition: service_healthy
    volumes:
      - ./Server/config.json:/min_chat/Server/config.json:ro
      - ./logs:/app/logs
      - ./uploads:/app/uploads
    networks:
      - backend_net

networks:
  backend_net:
    driver: bridge

volumes:
  db_volume:

关键设计决策

数据库连接方式

初期考虑利用 Docker DNS 机制通过服务名解析数据库地址,但需修改源码增加环境变量支持。为保持最小改动原则,最终采用配置文件外挂方案:在宿主机维护 config.json,通过卷挂载映射至容器内部。

端口映射策略

数据库服务映射至宿主机的 13306 端口,避免与可能存在的本地 MySQL 实例产生冲突;应用服务保持 1314 端口对外暴露。

传统部署方式(对照参考)

如需非容器化运行,按以下步骤操作:

服务端

cd chat_room/Server
make

导入 chat_room.sql 至数据库,修改 config.json 中的连接配置,执行 ./chat_room_srv 启动。

客户端

cd chat_room/Client
make

配置服务器地址后执行 ./chat_room_cli,首次使用需完成账号注册。

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。