简介
本章将创建工程项目,完成如下目标:
①、本地运行 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 文件
# Tomcat
server:
port: 9201
# Spring
spring:
application:
# 应用名称
name: ruoyi-system
profiles:
# 环境配置
active: dev
cloud:
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