首页主机资讯如何利用Ubuntu Docker搭建微服务

如何利用Ubuntu Docker搭建微服务

时间2025-12-03 02:40:04发布访客分类主机资讯浏览1474
导读:在 Ubuntu 上使用 Docker 搭建微服务的实操指南 一 环境准备与安装 更新系统并安装依赖 sudo apt update && sudo apt upgrade -y sudo apt install -y...

在 Ubuntu 上使用 Docker 搭建微服务的实操指南

一 环境准备与安装

  • 更新系统并安装依赖
    • sudo apt update & & sudo apt upgrade -y
    • sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
  • 添加 Docker 官方 GPG 与 APT 源(使用推荐的 keyrings 方式)
    • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    • echo “deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 安装 Docker 引擎
    • sudo apt update & & sudo apt install -y docker-ce docker-ce-cli containerd.io
  • 验证安装
    • sudo docker run --rm hello-world
  • 可选 安装 Docker Compose(便于多容器编排)
    • sudo apt install -y docker-compose
    • docker-compose --version
  • 将当前用户加入 docker 组(避免每次 sudo)
    • sudo usermod -aG docker $USER & & newgrp docker 以上步骤覆盖在 Ubuntu 上安装 Docker 与 Docker Compose 的通用做法,适用于后续微服务开发与部署。

二 项目结构与镜像构建

  • 推荐目录结构
    • services/
      • gateway/
        • Dockerfile
        • target/gateway.jar
      • user-service/
        • Dockerfile
        • target/user-service.jar
      • order-service/
        • Dockerfile
        • target/order-service.jar
      • nginx/
        • Dockerfile
        • nginx.conf
        • dist/
    • docker-compose.yml
  • Java 微服务 Dockerfile 示例(Spring Boot)
    • FROM openjdk:11-jdk-slim
    • WORKDIR /app
    • COPY target/*.jar app.jar
    • EXPOSE 8080
    • CMD [“java”,“-jar”,“/app/app.jar”]
  • Node.js 微服务 Dockerfile 示例
    • FROM node:18-alpine
    • WORKDIR /app
    • COPY package*.json ./
    • RUN npm ci --only=production
    • COPY . .
    • EXPOSE 3000
    • CMD [“node”,“server.js”]
  • 前端 Nginx 示例(将前端静态资源由 Nginx 托管)
    • FROM nginx:1.25-alpine
    • COPY nginx.conf /etc/nginx/nginx.conf
    • COPY dist/ /usr/share/nginx/html
    • EXPOSE 80 以上示例涵盖常见的 Java/Node.js 微服务以及 Nginx 前端托管镜像写法,便于在同一仓库中统一管理多服务镜像。

三 使用 Docker Compose 编排多服务

  • 示例 docker-compose.yml(含数据库、缓存、注册中心、网关与业务服务)
    • version: “3.8”
    • services:
      • mysql:
        • image: mysql:8.0
        • environment:
          • MYSQL_ROOT_PASSWORD=RootPass!23
          • MYSQL_DATABASE=appdb
        • volumes:
          • mysql-data:/var/lib/mysql
        • ports:
          • “3306:3306”
      • redis:
        • image: redis:7-alpine
        • ports:
          • “6379:6379”
      • nacos:
        • image: nacos/nacos-server:v2.4.3
        • environment:
          • MODE=standalone
        • ports:
          • “8848:8848”
      • gateway:
        • build: ./services/gateway
        • ports:
          • “8080:8080”
        • depends_on:
          • nacos
          • user-service
          • order-service
      • user-service:
        • build: ./services/user-service
        • environment:
          • SPRING_PROFILES_ACTIVE=prod
          • SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/appdb?useSSL=false& serverTimezone=UTC
          • SPRING_REDIS_HOST=redis
        • depends_on:
          • mysql
          • redis
      • order-service:
        • build: ./services/order-service
        • environment:
          • SPRING_PROFILES_ACTIVE=prod
          • SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/appdb?useSSL=false& serverTimezone=UTC
          • SPRING_REDIS_HOST=redis
        • depends_on:
          • mysql
          • redis
      • nginx:
        • build: ./services/nginx
        • ports:
          • “80:80”
    • volumes:
      • mysql-data:
  • 常用命令
    • 构建并启动:docker-compose up --build -d
    • 查看状态:docker-compose ps
    • 查看日志:docker-compose logs -f [service]
    • 重启服务:docker-compose restart [service]
    • 滚动更新:docker-compose up -d --build --no-deps [service]
    • 停止清理:docker-compose down -v 上述编排示例展示了在同一网络中通过服务名(如 mysql/redis/nacos)进行服务发现,避免硬编码 localhost;并给出日常运维常用命令。

四 配置与网络要点

  • 服务发现与连接
    • Spring Boot 的 application.yml 中使用服务名作为主机名(例如:spring.datasource.url 中的 mysql:3306、spring.redis.host 为 redis),与 Compose 默认网络一致即可互通。
  • 数据与配置持久化
    • 数据库使用 named volume(如示例中的 mysql-data)持久化数据;敏感信息通过 environment.env 文件注入,避免写死在镜像中。
  • 启动顺序与健康检查
    • Compose 的 depends_on 不保证应用就绪,生产可用健康检查与重试机制(如 Spring Cloud LoadBalancer 重试、应用内启动探针)提升稳定性。
  • 前端与网关路由
    • 通过 Nginx 托管前端静态资源并反向代理 API 到 gateway:8080;API 路径统一前缀(如 /api/)便于路由与鉴权。
  • 日志与排错
    • 统一结构化日志(JSON),使用 docker-compose logs -f 实时排查;必要时进入容器:docker-compose exec [service] sh。

五 扩展与运维建议

  • 编排与规模
    • 单机多服务用 Docker Compose 足够;需要集群高可用与自动扩缩容时,可迁移到 Docker SwarmKubernetes
  • 监控与日志
    • 指标与可视化:Prometheus + Grafana 监控容器与应用指标;日志聚合:ELK(Elasticsearch + Logstash + Kibana)或 Loki + Promtail 收集与检索容器日志。
  • 持续交付
    • 使用 GitHub Actions/GitLab CI 构建镜像、推送到镜像仓库(如 Docker Hub/私有仓库),在目标环境执行 docker-compose pull & & docker-compose up -d 实现零停机滚动升级(配合健康检查与优雅停机)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何利用Ubuntu Docker搭建微服务
本文地址: https://pptw.com/jishu/762003.html
Ubuntu Golang打包失败怎么解决 Debian Context中如何进行版本控制

游客 回复需填写必要信息