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)来运行。所以我们要先查看电脑是否支持虚拟化且是否开启,详细可以看其他大佬的博客:
作者报错是因为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://elastic.m.daocloud.io",
"https://elastic.m.daocloud.io",
"https://docker.m.daocloud.io",
"https://k8s-gcr.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"
改。