简介
本章将创建工程项目,完成如下目标:
①、本地运行 nacos,idea 中运行微服务项目,使得编写的微服务能注册到 本地 nacos
②、将微服务打成 jar 包,将该 jar包上传到指定目录,编写 Dockerfile 和 docker-compose.yml 文件。将其运行成 docker 容器,该容器中的 微服务能访问其他容器中的 nacos
要解决的主要问题:
在不清楚 nacos服务容器的ip情况下,如何编写 docker-compose.yml 文件,使其 微服务能在容器中访问到 nacos 容器所在服务。
项目环境搭建
创建父项目 RuoYi-Cloud

其 pom.xml 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ruoyi</groupId><artifactId>ruoyi</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>ruoyi-modules</module></modules><properties><ruoyi.version>1.0.0</ruoyi.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-boot.version>2.3.7.RELEASE</spring-boot.version><druid.version>1.2.4</druid.version><dynamic-ds.version>3.2.1</dynamic-ds.version><spring-boot.mybatis>2.1.3</spring-boot.mybatis><pagehelper.boot.version>1.3.0</pagehelper.boot.version><fastjson.version>1.2.75</fastjson.version><spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Hoxton.SR9</spring-cloud.version><kaptcha.version>2.3.2</kaptcha.version><poi.version>4.1.2</poi.version></properties><!-- 依赖声明 --><dependencyManagement><dependencies><!-- SpringBoot 依赖配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- SpringCloud Alibaba 微服务 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!-- SpringCloud 微服务 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins></build></project>
创建子模块 ruoyi-modules

其 pom.xml 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>ruoyi</artifactId><groupId>com.ruoyi</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><packaging>pom</packaging><artifactId>ruoyi-modules</artifactId><modules><module>ruoyi-system</module></modules></project>
创建子子模块 ruoyi-system
pom.xml 文件
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>com.ruoyi</groupId><artifactId>ruoyi-modules</artifactId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>ruoyi-system</artifactId><packaging>jar</packaging><dependencies><!-- SpringBoot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- springcloud ailibaba nacos discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
bootstrap.yml 文件
# Tomcatserver:port: 9201# Springspring:application:# 应用名称name: ruoyi-systemprofiles:# 环境配置active: devcloud:nacos:discovery:# 服务注册地址server-addr: 127.0.0.1:8848
主启动类
package com.ruoyi.system;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RuoYiSystemApplication {
public static void main(String[] args) {
SpringApplication.run(RuoYiSystemApplication.class, args);
}
}
项目打包
方式1
方式2
使用 cmd 命令行工具,然后切换路径到父项目,使用如下命令打包:
mvn clean package -Dmaven.test.skip=true
打包的结果

本地测试
运行本地nacos
本地运行jar包
java -jar ruoyi-system-1.0-SNAPSHOT.jar
验证结果
登录到nacos控制台: http://localhost:8848/nacos 默认的用户名和密码都是 nacos
查看服务是否注册成功?
发布到 Docker
创建目录
拷贝打包好的jar到指定目录
将 ruoyi-system-1.0-SNAPSHOT.jar 文件拷贝到 ruoyi / modules / system / jar 目录下
创建 Dockerfile文件
在 ruoyi / modules / system 目录下,创建 Dockerfile 文件。其内容如下:
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-system-1.0-SNAPSHOT.jar /home/ruoyi/ruoyi-system-1.0-SNAPSHOT.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","ruoyi-system-1.0-SNAPSHOT.jar"]
编辑 docker-compose.yml 文件
关键内容截图:
具体的 docker-compose.yml 文件内容:
version : '3.8'
services:
mysql:
container_name: ruoyi-mysql
build:
context: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
command: [
'mysqld',
'--innodb-buffer-pool-size=80M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: 'nacos_config'
redis:
container_name: ruoyi-redis
build:
context: ./redis
ports:
- "6379:6379"
volumes:
- ./redis/conf/redis.conf:/home/ruoyi/redis/redis.conf
- ./redis/data:/data
command: redis-server /home/ruoyi/redis/redis.conf
nacos:
container_name: ruoyi-nacos
image: nacos/nacos-server
env_file:
- ./nacos/env/nacos-standlone-mysql.env
volumes:
- ./nacos/logs/:/home/nacos/logs
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
depends_on:
- mysql
nginx:
container_name: ruoyi-nginx
build:
context: ./nginx
ports:
- "80:80"
volumes:
- ./nginx/html/dist:/home/ruoyi/projects/ruoyi-ui
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
- ./nginx/conf.d:/etc/nginx/conf.d
ruoyi-modules-system: # 服务名称
container_name: ruoyi-modules-system # 容器名称,但最终的容器名称会加上项目名做前缀
build:
context: ./ruoyi/modules/system #指定构建镜像的上下文路径(即 Dockerfile文件所在路径)
environment:
- spring.cloud.nacos.discovery.server-addr=nacos:8848
ports:
- "9201:9201" # 端口映射
depends_on:
- nacos # 依赖的服务。这里表示先启动 nacos服务所在容器
启动容器
cd /data/ruoyi # 切换到 docker-compose.yml 文件所在位置
docker-compose up -d # 以后台方式启动 docker-compose.yml 文件定义的容器(服务)
查看服务状态
docker-compose ps
查看日志
比如查看 ruoyi-modules-system 服务的日志
docker-compose logs ruoyi-modules-system
查看微服务是否注册到 nacos

知识点
通过服务名方式代替ip地址

