news 2026/4/17 14:38:19

Ubuntu 环境下 Docker 部署 微服务 项目完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 环境下 Docker 部署 微服务 项目完整指南

Ubuntu 环境下 Docker 部署 微服务 项目完整指南

一、Docker 安装与配置

1. 系统环境准备

# 更新系统软件包sudoaptupdate# 安装必要工具sudoaptinstallapt-transport-httpscurl

2. 添加 Docker 官方 GPG 密钥和仓库

# 添加 Docker 官方 GPG 密钥curl-fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg|sudoapt-keyadd-# 添加稳定版仓库sudoadd-apt-repository"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu$(lsb_release -cs)stable"

3. 安装 Docker 引擎

# 更新软件包索引sudoaptupdatesudoaptupgrade# 安装 Docker 及相关组件sudoapt-getinstalldocker-ce docker-ce-cli containerd.io# 验证安装sudodocker--versionsudodockercompose --version

4. 配置 Docker 镜像加速和日志

添加/etc/docker/daemon.json文件:

sudomkdir-p /etc/dockersudotee/etc/docker/daemon.json<<EOF { "log-driver":"json-file", "log-opts":{ "max-size" :"50m","max-file":"1" }, "registry-mirrors": [ "https://docker.1ms.run", "https://docker.xuanyuan.me", "https://a99fyh8b.mirror.aliyuncs.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.cn-hangzhou.aliyuncs.com", "https://reg-mirror.qiniu.com/", "https://docker.mirrors.ustc.edu.cn" ] } EOF

5. 启动 Docker 服务

# 重启 Docker 服务sudosystemctl daemon-reloadsudosystemctl restartdocker# 设置开机自启sudosystemctlenabledocker# 将当前用户添加到 docker 组(避免每次使用 sudo)sudousermod-aGdocker$USERnewgrpdocker

二、微服务解决方案

项目是用jeecgboot,参考地址:[微服务方式启动项目 | JEECG 文档中心](https://help.jeecg.com/java/springcloud/switchcloud/solve)

三、项目结构与部署配置

项目目录结构

项目根目录/ ├── docker-compose.yml # 主编排文件 ├── nacos/ # nacos服务目录 ├── system/ # 后端服务目录 ├── gateway/ # 网关服务目录 └── web/ # 前端服务目录

1. Docker Compose 编排文件(docker-compose.yml)

# Docker Compose 版本version:'2'# 自定义网络配置 - 所有服务在同一网络内便于通信networks:aa-bb-network:ipam:config:-subnet:10.17.17.0/24# 子网范围:10.17.17.1 - 10.17.17.254# 服务定义services:# Redis 缓存服务 - 用于会话存储和缓存aa-bb-redis:image:redis:5.0# Redis 5.0 官方镜像ports:-16376:6379# 主机端口16376映射到容器6379端口restart:always# 总是自动重启hostname:aa-bb-redis# 容器主机名container_name:aa-bb-redis# 容器名称environment:TZ:Asia/Shanghai# 上海时区networks:aa-bb-network:ipv4_address:10.17.17.11# 固定IP地址# MySQL 数据库服务 - 主数据库存储aa-bb-mysql:image:mysql:8.0# MySQL 8.0 官方镜像ports:-11501:3306# 主机端口11501映射到容器3306端口environment:MYSQL_ROOT_PASSWORD:root# root用户密码MYSQL_ROOT_HOST:'localhost'# root访问限制TZ:Asia/Shanghai# 上海时区restart:always# 总是自动重启hostname:aa-bb-mysql# 容器主机名container_name:aa-bb-mysql# 容器名称mem_limit:2g# 内存限制2GBvolumes:-./mysql/data:/var/lib/mysql# 数据持久化存储-./mysql/logs:/var/log/mysql# 日志持久化存储command:# MySQL启动参数配置--character-set-server=utf8mb4# UTF8字符集--collation-server=utf8mb4_general_ci# 排序规则--explicit_defaults_for_timestamp=true# 时间戳默认值--lower_case_table_names=1# 表名小写不区分大小写--max_allowed_packet=128M# 最大数据包128M--default-authentication-plugin=mysql_native_password# 认证插件networks:aa-bb-network:ipv4_address:10.17.17.12# 固定IP地址# RabbitMQ 消息队列服务 - 用于异步消息处理aa-bb-rabbitmq:image:rabbitmq:latest# 最新版RabbitMQports:-5680:5672# AMQP协议端口(消息通信)-15680:15672# 管理界面端口(Web UI)restart:always# 总是自动重启container_name:aa-bb-rabbitmq# 容器名称hostname:aa-bb-rabbitmq# 容器主机名volumes:-./other:/other# 其他文件挂载environment:RABBITMQ_DEFAULT_USER:guest# 默认用户名guestRABBITMQ_DEFAULT_PASS:guest# 默认密码guestnetworks:aa-bb-network:ipv4_address:10.17.17.13# 固定IP地址# Nacos 服务注册与发现中心 - 微服务核心组件aa-bb-nacos:restart:always# 总是自动重启build:context:./nacos# 从./nacos目录构建Docker镜像volumes:-./nacos:/aa-bb-nacos# 配置和日志挂载-./nacos/logs:/logs# 日志目录挂载ports:-8848:8848# Nacos控制台和管理端口container_name:aa-bb-nacos# 容器名称hostname:aa-bb-nacos# 容器主机名networks:aa-bb-network:ipv4_address:10.17.17.14# 固定IP地址# 系统服务 - 核心业务服务aa-bb-system:depends_on:-aa-bb-nacos# 依赖Nacos服务先启动build:context:./system# 从./system目录构建Docker镜像volumes:-./system:/aa-bb-system# 代码和配置挂载-./system/logs:/logs# 日志目录挂载-./upload:/upload# 文件上传目录挂载container_name:aa-bb-system# 容器名称hostname:aa-bb-system# 容器主机名restart:on-failure# 仅在失败时重启environment:-TZ=Asia/Shanghai# 上海时区networks:aa-bb-network:ipv4_address:10.17.17.30# 固定IP地址# 用户管理服务(cc) - 自定义业务模块aa-bb-cc:depends_on:-aa-bb-nacos# 依赖Nacos服务先启动build:context:./cc# 从./yh目录构建Docker镜像volumes:-./cc:/aa-bb-cc# 代码和配置挂载-./cc/logs:/logs# 日志目录挂载-./upload:/upload# 文件上传目录挂载container_name:aa-bb-cc# 容器名称hostname:aa-bb-cc# 容器主机名restart:on-failure# 仅在失败时重启environment:-TZ=Asia/Shanghai# 上海时区networks:aa-bb-network:ipv4_address:10.17.17.31# 固定IP地址# 网关服务 - API网关,统一入口aa-bb-gateway:restart:on-failure# 仅在失败时重启build:context:./gateway# 从./gateway目录构建Docker镜像volumes:-./gateway:/aa-bb-gateway# 代码和配置挂载-./gateway/logs:/logs# 日志目录挂载ports:-9999:9999# 网关服务端口depends_on:-aa-bb-nacos# 依赖Nacos服务发现-aa-bb-system# 依赖系统服务container_name:aa-bb-gateway# 容器名称hostname:aa-bb-gateway# 容器主机名networks:aa-bb-network:ipv4_address:10.17.17.15# 固定IP地址# Nginx Web服务 - 反向代理和静态文件服务aa-bb-web:image:nginx:latest# 最新版Nginxrestart:on-failure# 仅在失败时重启ports:-11500:80# 主机端口11500映射到容器80端口volumes:-./web/logs:/var/log/nginx# Nginx日志持久化-./web/conf:/etc/nginx/conf.d# Nginx配置文件目录-./web/html/dist:/var/www/html# 前端静态文件目录container_name:aa-bb-web# 容器名称hostname:aa-bb-web# 容器主机名networks:aa-bb-network:ipv4_address:10.17.17.20# 固定IP地址# 架构总结:# 1. Redis: 缓存/会话服务 (IP: 10.17.17.11, 端口: 6379)# 2. MySQL: 数据库服务 (IP: 10.17.17.12, 端口: 3306)# 3. RabbitMQ: 消息队列服务 (IP: 10.17.17.13, 端口: 5672/15672)# 4. Nacos: 服务注册中心 (IP: 10.17.17.14, 端口: 8848)# 5. Gateway: API网关 (IP: 10.17.17.15, 端口: 9999)# 6. Nginx: 前端代理 (IP: 10.17.17.20, 端口: 80)# 7. System: 系统服务 (IP: 10.17.17.30, 端口: 应用默认)# 8. cc: 用户管理服务 (IP: 10.17.17.31, 端口: 应用默认)# 所有服务在同一自定义网络内,可通过容器名或固定IP相互通信

2. nacos服务目录

项目目录结构
nacos/ ├── Dockerfile # 镜像构建文件 └── boot/ # jar服务目录
Dockerfile文件
FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/java:17-anolis MAINTAINER 11@qq.com RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime WORKDIR /aa-nacos/boot EXPOSE 8848 CMD sleep 30;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-nacos-3.9.0.jar

3. system服务目录

项目目录结构
system/ ├── Dockerfile # 镜像构建文件 ├── log/ # 日志文件目录 ├── upload # 上传文件目录 └── boot/ # jar服务目录

4. gateway服务目录

项目目录结构
gateway/ ├── Dockerfile # 镜像构建文件 └── boot/ # jar服务目录

5. web服务目录

项目目录结构
web/ # 前端服务目录 ├── conf/ │ └── default.conf # Nginx 配置 ├── html/ │ ├── dist/ # 前端静态文件 │ └── Dockerfile # 前端镜像构建文件 └── logs/ # Nginx 日志
前端 Nginx 配置(default.conf)
server { listen 80; root /var/www/html/; client_max_body_size 100M; client_body_buffer_size 100M; #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 location / { #alias /var/www/html/; # 用于配合 browserHistory使用 try_files $uri $uri/ /index.html # 不缓存html,防止程序更新后缓存继续生效 error_page 404 /index.html; } location /jeecgboot/ { proxy_pass http://aa-bb-gateway:9999/; #这里一定要改为网关 proxy_redirect off; proxy_set_header Host yh-sy-system; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log /var/log/nginx/access.log ; }
前端 Dockerfile
FROM nginx:latest MAINTAINER 11@qq.com VOLUME /tmp ENV LANG en_US.UTF-8 RUN mkdir -p /var/www \ && mkdir -p /var/www/html EXPOSE 80 EXPOSE 443

6. 配置完成,执行命令

dockercompose up -d

四、常用运维命令

# 启动服务dockercompose up -d# 停止服务dockercompose down# 查看服务状态dockercomposeps# 查看实时日志dockercompose logs -f# 查看特定服务日志dockercompose logs -f aa-bb-system(替换服务名称)# 进入容器调试dockerexec-it aa-bb-systembash# 停止指定服务dockercompose stop aa-bb-system# 启动指定服务dockercompose start aa-bb-system
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:06:37

Linux集群与分布式存储全面实战指南

声明与使用说明环境声明与注意事项实验环境说明&#xff1a; 本文档基于以下标准实验环境编写&#xff0c;实际部署时请根据您的环境进行调整&#xff1a;操作系统&#xff1a;Rocky Linux 9.5&#xff08;其他RHEL 9系衍生版也可参考&#xff09;虚拟化平台&#xff1a;KVM&am…

作者头像 李华
网站建设 2026/4/18 0:14:14

Docker容器化排错全攻略:2025年常见问题与解决方案

前言&#xff1a;Docker生态环境的现状截至2025年&#xff0c;Docker已经成为企业应用部署的主流选择&#xff0c;但随之而来的各种问题也让开发者和运维人员头疼不已。本文将从实践经验出发&#xff0c;全面梳理Docker容器化过程中最常见的各类问题&#xff0c;并提供系统的排…

作者头像 李华
网站建设 2026/4/18 8:39:24

如何将零信任架构与现有企业网络体系结合,给出分步实施建议?

将零信任架构融入现有企业网络&#xff0c;绝非简单的技术替换&#xff0c;而是一次战略性的安全范式转移。其核心是从传统的“信任但验证”的城堡护城河模式&#xff0c;转向“永不信任&#xff0c;始终验证”的动态智能安全模型以下是每个阶段的关键任务和行动指南&#xff0…

作者头像 李华
网站建设 2026/4/18 8:16:27

使用PyTorch实现简单的图像分类CNN模型

使用PyTorch实现简单的图像分类CNN模型 在深度学习领域&#xff0c;图像分类是计算机视觉中最基础也最核心的任务之一。无论是识别照片中的物体、自动驾驶中的道路检测&#xff0c;还是医学影像分析&#xff0c;背后都离不开高效的卷积神经网络&#xff08;CNN&#xff09;。然…

作者头像 李华
网站建设 2026/4/18 5:43:23

PyTorch安装常见错误汇总:GPU不可用?CUDA版本不匹配?

PyTorch安装常见错误汇总&#xff1a;GPU不可用&#xff1f;CUDA版本不匹配&#xff1f; 在深度学习项目启动的第一天&#xff0c;最让人崩溃的不是模型跑不通&#xff0c;而是——torch.cuda.is_available() 返回了 False。 明明买了RTX 4090&#xff0c;结果训练速度还不如同…

作者头像 李华