Docker部署微服务

Docker部署微服务

一、docker环境的下载安装

docker官网:Docker: Accelerated Container Application Development

下载windos版本

注意报错:

等到下载完毕打开docker时,可以回出现报错

Virtualization support not detected Docker Desktop requires virtualization support to run

这个报错说明你的系统或 CPU 环境 不支持虚拟化,或者虚拟化被关闭了,而 Docker Desktop 依赖虚拟化(如 Hyper-V 或 WSL2)来运行。所以我们要先查看电脑是否支持虚拟化且是否开启,详细可以看其他大佬的博客:

Virtualization support not detected Docker Desktop requires virtualization support to run.(解决)-CSDN博客

作者报错是因为Windows Hypervisor 没启动,按照这个教程启动一下就好了。

二、docker环境下打包、运行docker镜像

启动docker后,可以看到左下角显示:running 则表示docker正在运行

这时我们需要将每个微服务打包为jar包,然后在根目录下新建文件Dockerfile

注意:不要有任何尾缀!就是Dockerfile

内容为:

使用官方 OpenJDK 镜像

FROM eclipse-temurin:17-jdk

作者信息

LABEL maintainer="一只游鱼"

创建 app 目录

WORKDIR /app

复制 jar 文件到容器

COPY target/*.jar app.jar

对外暴露端口(和 application.properties 中 server.port 保持一致)

EXPOSE 81

容器启动命令

ENTRYPOINT ["java","-jar","app.jar"]

然后打开cmd 文件夹窗口,构建镜像:

docker build -t cyfang-gateway-service:1.0 .

这里可能会报错,原因是网络qiang,可以打开docker设置修改镜像源:

输入源(2025.12.8 测试好使)

{

"builder": {

"gc": {

"defaultKeepStorage": "20GB",

"enabled": true

}

},

"experimental": false,

"registry-mirrors": [

"https://ccr.ccs.tencentyun.com",

"https://docker.rainbond.cc",

"https://elastic.m.daocloud.io",

"https://elastic.m.daocloud.io",

"https://docker.m.daocloud.io",

"https://gcr.m.daocloud.io",

"https://ghcr.m.daocloud.io",

"https://k8s-gcr.m.daocloud.io",

"https://k8s.m.daocloud.io",

"https://mcr.m.daocloud.io",

"https://nvcr.m.daocloud.io",

"https://quay.m.daocloud.io"

]

}

应用且重启,再次构建即可成功(如果第一次没缓存的情况下,会比较慢):

如图:

构建好后,导出tar,

docker save -o cyfang-gateway-service.tar cyfang-gateway-service:1.0

等待导出成功上传到服务器:

(服务器要有docker环境)linux部署docker可以看作者的博客linux部署docker(国内镜像)_linux docker配置国内镜像-CSDN博客

找到上传的tar,从本地 tar 包加载 Docker 镜像

docker load -i cyfang-gateway-service.tar

等待成功后,因为一般微服务打包的docker 镜像比较多,所以我们写一个docker-compose.yml

内容为

services:

cyfang-gateway-service:

image: cyfang-gateway-service:1.0

container_name: cyfang-gateway-service

ports:

  • "81:81"

restart: always

environment:

  • SPRING_APPLICATION_NAME=cyfang-gateway-service

  • SPRING_PROFILES_ACTIVE=prod

cyfang-gateway-service:

服务名:在 Docker Compose 中标识这个服务的名字,其他服务可以通过这个名字依赖它。

image: cyfang-gateway-service:1.0

镜像:指定使用本地或远程 Docker 镜像 cyfang-gateway-service,标签为 1.0。

如果本地没有,会尝试从 Docker Hub 或私有仓库拉取。

container_name: cyfang-gateway-service

容器名:启动容器时使用固定名称 cyfang-gateway-service,方便管理和定位。

如果不指定,Docker 会随机生成一个名字。

ports:

- "81:81"

端口映射:把宿主机的 81 端口 映射到容器的 81 端口。

例如,你访问 http://宿主机IP:81 就相当于访问容器的 81 端口。

restart: always

自动重启策略:容器异常退出后会自动重启。

always 表示无论容器退出状态如何,Docker 都会尝试重启它。

environment:

  • SPRING_APPLICATION_NAME=cyfang-gateway-service

  • SPRING_PROFILES_ACTIVE=prod

环境变量:

SPRING_APPLICATION_NAME:Spring Boot 应用名,用于服务注册或日志识别。

SPRING_PROFILES_ACTIVE:激活 Spring 配置文件,这里是 prod(生产环境配置)。

其他容器相同。。。

将Dockerfile 和 tar 文件放在同一目录下,

sudo docker compose up -d

然后静静等待他完毕。。。

三、那些天作者经历的坑

1、环境地址问题

因为我们在开发环境下一般写nacos路径等都要写127.0.0.1:8848, 但作者是将nacos、redis等中间件和微服务镜像都放在docker里的,所以要写server-addr: nacos:8848 docker会自动解析nacos转发到对应的容器名字里去,127.0.0.1 指的是容器自身!

2、网络问题

在docker中,会有多个网络,且只有在同一网络的容器能互相访问,,如何查看?

docker network ls

如果没在同一个网络,可以通过

(1)启动容器时自定义

docker run -d --name my-container --network my_custom_network my-image

(2)把容器连接到多个网络(跨网络访问)

docker network connect my_network2 my-container

3、注意镜像的ip 映射

这样才能确保外部访问docker服务,修改映射可以在刚刚说的docker-compose.yml ports:

  • "81:81"

改。

相关推荐
这周也會开心11 小时前
Docker Compose容器化部署
运维·docker·容器
想进部的张同学11 小时前
RK3588 + Docker + GStreamer 实现 RTSP 推流(MJPEG AVI → H.264),VLC 成功拉流
docker·音视频·h.264
独断万古他化11 小时前
Docker 入门前置:容器虚拟化基础之Namespace 空间隔离
linux·docker·容器
AC赳赳老秦12 小时前
Docker+DeepSeek:生成镜像优化Dockerfile与容器健康检查脚本
android·运维·人工智能·机器学习·docker·容器·deepseek
fcm1912 小时前
导出已有的docker容器
docker·容器·eureka
等什么君!12 小时前
Docker中常用的镜像命令和容器命令
运维·docker·容器
CodeCaptain12 小时前
dify需要使用rerank模型,docker安装xinference的解决方案
经验分享·docker·ai·容器
shandianchengzi21 小时前
【记录】Tailscale|部署 Tailscale 到 linux 主机或 Docker 上
linux·运维·docker·tailscale
肉肉心很软1 天前
使用onlyoffice实现文件预览编辑 + Docker一键部署流程
运维·docker·容器
-大头.1 天前
Docker实战:构建高性能MySQL主从复制集群(读写分离)
mysql·docker·容器