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"

改。

相关推荐
qq_4557608516 小时前
docker - 镜像、存储卷和网络深入理解
运维·docker·容器
一只废狗狗狗狗狗狗狗狗狗17 小时前
基于docker desktop的hadoop集群结点启动失败问题
hadoop·docker·docker desktop
木童66218 小时前
Ruo-Yi 项目 CICD 完整部署文档(含命令详解)
ci/cd·docker·容器
幺零九零零20 小时前
Docker底层- 命令详解
运维·docker·容器
网络风云21 小时前
Flask 的 Docker 部署指南
python·docker·flask
Ama_tor21 小时前
docker|F盘安装の1键部署软件及数据储存+2个保姆级运行实例
运维·docker·容器
可爱又迷人的反派角色“yang”1 天前
GitLab配置与git集成实践
linux·网络·git·docker·云计算·gitlab
invicinble1 天前
对于docker在项目中的完整实战
运维·docker·容器
❀͜͡傀儡师1 天前
Docker快速部署一个轻量级邮件发送 API 服务
jvm·docker·容器
深耕AI1 天前
Docker Volumes详解
运维·docker·容器