如何利用Ubuntu Docker搭建微服务
导读:在 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/
- gateway/
- docker-compose.yml
- services/
- 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”
- mysql:
- 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 Swarm 或 Kubernetes。
- 监控与日志
- 指标与可视化: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
