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"

改。

相关推荐
雨中飘荡的记忆5 小时前
Docker与Java实战指南
java·docker·容器
AllinGold6 小时前
Centos stream9 安装docker并配置镜像源 实现github docker项目部署
docker·centos·github
峰顶听歌的鲸鱼6 小时前
14.docker:镜像
运维·笔记·docker·容器·学习方法
java_logo6 小时前
Apache RocketMQ Docker 容器化部署指南
运维·docker·容器·kafka·kubernetes·apache·rocketmq
eight *21 小时前
源码部署docker自动化脚本
docker·shell
sayyy21 小时前
【Docker】 安装 mysql8.0
mysql·docker
胡斌附体1 天前
docker 升级
ubuntu·docker·升级·docker compose·apt-get
基哥的奋斗历程1 天前
部署指南-1B-单体Docker-自建方案
运维·docker·容器
程序员老赵1 天前
Apache RocketMQ Docker 容器化部署指南
docker·rocketmq