news 2026/4/22 21:32:48

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/23 13:39:05

Git commit规范在AI项目中的应用:提升团队协作效率

Git commit规范在AI项目中的应用&#xff1a;提升团队协作效率 在现代人工智能项目的开发中&#xff0c;一个看似不起眼的实践——写好一条 git commit 提交信息&#xff0c;往往能决定整个团队是高效协同还是陷入混乱。尤其是在使用如 PyTorch-CUDA-v2.7 这类高度集成的容器化…

作者头像 李华
网站建设 2026/4/23 13:34:10

从GitHub克隆项目到本地运行:基于PyTorch-CUDA镜像的全流程

从GitHub克隆项目到本地运行&#xff1a;基于PyTorch-CUDA镜像的全流程 在深度学习项目的日常开发中&#xff0c;你是否曾经历过这样的场景&#xff1a;满怀期待地从 GitHub 克隆一个热门项目&#xff0c;刚准备运行就遭遇“ModuleNotFoundError”、“CUDA version mismatch”或…

作者头像 李华
网站建设 2026/4/23 11:38:02

PyTorch+CUDA环境部署避坑指南:新手必读

PyTorchCUDA环境部署避坑指南&#xff1a;新手必读 在深度学习项目启动阶段&#xff0c;最让人头疼的往往不是模型设计或数据处理&#xff0c;而是——“为什么我的PyTorch不识别GPU&#xff1f;”、“CUDA版本冲突怎么办&#xff1f;”、“明明代码没错&#xff0c;却卡在环境…

作者头像 李华
网站建设 2026/4/23 13:15:57

Transformers模型训练提速秘籍:基于PyTorch+GPU镜像优化

Transformers模型训练提速秘籍&#xff1a;基于PyTorchGPU镜像优化 在当今AI研发节奏日益加快的背景下&#xff0c;一个常见的尴尬场景是&#xff1a;你刚刚复现了一篇顶会论文的模型结构&#xff0c;信心满满准备开始训练&#xff0c;结果卡在了环境配置上——torch.cuda.is_a…

作者头像 李华
网站建设 2026/4/22 22:38:49

MKS Instruments 1179A11CR1BV控制器

MKS Instruments 1179A11CR1BV 是一款高精度的压力传感器或控制器&#xff0c;通常用于工业、半导体制造或科研领域的真空或气体压力测量。该型号属于MKS的1179A系列&#xff0c;具有高稳定性和可靠性&#xff0c;适用于严苛环境。主要特性测量范围&#xff1a;通常覆盖从低真空…

作者头像 李华