goweb3系列解析21:GoDocker 目录解析

goweb3系列解析21:GoDocker 目录解析 本文详细介绍了goweb3项目的Docker容器化部署方案该项目采用多环境、多服务架构支持从开发到生产的全生命周期管理。核心内容包括1清晰的目录结构划分包含基础服务镜像MySQL/Redis/Nginx等和应用服务2五层环境体系local→dev→test→release→master3标准化的Dockerfile和docker-compose模板4基础服务的中文与时区优化配置5完善的配置文件结构和部署脚本。该方案具有轻量级镜像、配置分离、数据持久化、自动恢复等特点通过Docker Compose实现服务编排各组件通过定义端口相互通信形成完整的微服务架构。Docker 目录解析docker目录是 goweb3 项目的容器化部署基础设施包含完整的多环境、多服务的 Docker 配置支持本地开发、测试、发布等全生命周期管理。一、目录结构总览plainTextdocker/ ├── docker-base/ # 基础服务镜像中间件 │ ├── docker-mysql13306/ # MySQL 5.7.25 │ ├── docker-redis/ # Redis │ ├── docker-nginx/ # Nginx │ ├── docker-etcd/ # Etcd │ ├── docker-clickhouse/ # ClickHouse │ ├── docker-doris/ # Doris │ ├── docker-postgres/ # PostgreSQL │ ├── docker-consul/ # Consul │ ├── docker-cockroach/ # CockroachDB │ ├── docker-gitea/ # Gitea │ ├── docker-gitlab/ # GitLab │ ├── docker-portainer/ # Portainer │ └── website/ # Website 相关 │ ├── docker-website-web/ # Web 前端 │ ├── docker-website-admin/ # Admin 前端 │ ├── docker-website-grpc/ # gRPC 网关 │ └── docker-website-mobile/ # 移动端 ├── admin/ # 管理后台服务 │ ├── dev/ │ ├── test/ │ ├── release/ │ └── master/ ├── web/ # 前台服务 │ ├── dev/ │ ├── test/ │ ├── release/ │ └── master/ ├── grpc/ # gRPC 服务 │ ├── dev/ │ ├── test/ │ ├── release/ │ └── master/ └── backend/ # 后端服务 ├── dev/ ├── test/ ├── release/ └── master/二、服务架构服务类型端口说明admin201管理后台服务web202前台网站服务grpc1201gRPC 服务backend202后端服务三、环境分层lainText┌─────────────────────────────────────────────────────┐ │ 环境层级 │ ├─────────────────────────────────────────────────────┤ │ local → 本地开发环境IDE运行 │ │ ↓ │ │ dev → 开发环境测试服务器 │ │ ↓ │ │ test → 测试环境QA验证 │ │ ↓ │ │ release → 预发布环境灰度发布 │ │ ↓ │ │ master → 生产环境正式上线 │ └─────────────────────────────────────────────────────┘四、核心配置解析1. Dockerfile 标准模板admin/dev/Dockerfile为例dockerfileFROM alpine:latest RUN apk --no-cache add ca-certificates # 环境变量 ENV BasePath/root/app ENV SWAGGER_HOST192.168.17.113:201/website-admin/v3 ENV SWAGGER_TITLE有芯网站管理后台服务-AdminServer # 创建目录 RUN mkdir -p /root/app RUN mkdir -p /root/app/logs WORKDIR /root/app # 复制配置和代码 COPY ./config /root/app/config COPY ./data /root/app/data ADD ./main /root/app/main RUN chmod x ./main EXPOSE 201 ENTRYPOINT [/root/app/main]特点基于alpine:latest轻量级镜像支持 HTTPSca-certificates配置文件和数据目录分离可执行文件权限设置2. docker-compose.yml 标准模板yamlversion: 3 services: website-admin: build: context: dockerfile: Dockerfile image: website-admin container_name: website-admin hostname: website-admin user: root restart: always ports: - 201:201 environment: TZ: Asia/Shanghai volumes: - /opt/logs/website-admin:/root/app/logs - /opt/data/website-admin:/root/app/data配置要点字段说明restart: always容器崩溃自动重启TZ: Asia/Shanghai时区设置volumes日志和数据持久化五、基础服务镜像docker-base1. MySQL 镜像docker-mysql13306/DockerfiledockerfileFROM mysql:5.7.25 # 配置中文支持 RUN apt-get update \ apt-get install -y locales kde-l10n-zhcn \ apt-get clean RUN locale-gen zh_CN.UTF-8 ENV LANGzh_CN.UTF-8 \ LANGUAGEzh_CN:zh:en_US:en \ LC_ALLzh_CN.UTF-8 \ TZAsia/Shanghai COPY my.cnf /etc/mysql/my.cnf EXPOSE 3306 CMD [mysqld]特性MySQL 5.7.25 版本支持中文 UTF-8 编码时区设置为上海2. Redis 镜像docker-redis/DockerfiledockerfileFROM redis:latest ENV TZAsia/Shanghai COPY redis.conf /usr/local/etc/redis/redis.conf EXPOSE 6379 CMD [redis-server, /usr/local/etc/redis/redis.conf]3. Nginx 镜像docker-nginx/DockerfiledockerfileFROM nginx:latest ENV TZAsia/Shanghai COPY nginx.conf /etc/nginx/nginx.conf COPY conf.d/ /etc/nginx/conf.d/ EXPOSE 80 EXPOSE 443 CMD [nginx, -g, daemon off;]六、配置文件结构每个服务目录下的config/结构plainTextconfig/ ├── env.yml # 环境标识 ├── ichub-dev.yml # 应用主配置 ├── factroy/ # 代码生成模板 │ ├── template/ # 模板文件 │ │ ├── Dao.template │ │ ├── Service.template │ │ ├── Web.template │ │ └── ... │ └── factroy.yml # 模板配置 ├── godi/ # 依赖注入配置 │ ├── template/ # DI模板 │ └── di_define.ini # DI定义 ├── rule_define/ # 规则定义 │ ├── general/ # 通用规则 │ │ ├── func_dbquery/ # 数据库查询 │ │ ├── func_esquery/ # ES查询 │ │ └── ... │ └── cms/ # CMS规则 ├── es/ # ES配置 │ └── mapping/ # ES映射 │ ├── mapping.json │ └── settings.json └── templates/ # 视图模板 ├── index.html └── index.tmplenv.ymlyamlEnv: ${ICHUB_ENV:dev} # local dev test release master raymond七、部署脚本每个环境目录下包含脚本说明build.sh构建镜像prepare.sh准备环境rmi.sh删除镜像clrDockerLog.sh清理日志八、服务端口汇总服务端口环境admin201dev/test/release/masterweb202dev/test/release/mastergrpc1201dev/test/release/masterbackend202dev/test/release/mastermysql13306docker-baseredis6379docker-baseetcd2379docker-baseclickhouse8123docker-basenginx80/443docker-base九、启动流程plainText1. 构建基础服务可选 cd docker/docker-base/docker-mysql13306 docker-compose up -d 2. 构建应用服务 cd docker/admin/dev docker-compose up -d 3. 验证服务 curl http://localhost:201/health十、设计特点特点说明多环境支持dev/test/release/master 四层环境轻量级镜像基于 alpine体积小、启动快配置分离配置文件独立于镜像便于管理数据持久化日志和数据目录挂载到宿主机自动重启容器崩溃自动恢复时区统一所有容器使用 Asia/Shanghai中文支持MySQL 等服务配置中文编码十一、部署架构图plainText┌─────────────────────────────────────────────────────────────┐ │ Docker Compose │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ website- │ │ website- │ │ website- │ │ │ │ admin │ │ web │ │ grpc │ │ │ │ (port 201)│ │ (port 202) │ │ (port 1201) │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ docker-base │ │ │ │ MySQL Redis Etcd ClickHouse Nginx │ │ │ │ 13306 6379 2379 8123 80/443 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘