Dockerfile 构建应用:
使用Dockerfile 自定义项目镜像。(打包的时候,应该跳过测试)
FROM openjdk:8-jre # 定义环境变量: ENV APP_PATH=/apps # 指定工作目录: WORKDIR $APP_PATH # 拷贝文件: ADD geshanzsq-nav-admin.jar $APP_PATH/apps.jar # 端口描述: EXPOSE 8080 # 不变的指令 ENTRYPOINT ["java", "-jar"] # 可变指令(支持传参) CMD ["apps.jar"]
实战案例:
编写一个应用,使用Docker打包运行!
1.部署中间件:
部署一个Redis+应用,尝试应用操作Redis产生数据!
在外部主机上/data/redis/
目录下创建redis.conf
配置文件,添加一以下内容:
appendonly yes requirepass 131452 #设置Redis密码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] #redis使用自定义配置文件启动 docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \ -v /data/redis/data:/data \ -d --name myredis \ -p 6379:6379 \ redis:latest redis-server /etc/redis/redis.conf
注意:这里的redis版本指定为最新版,如果指定版本需要修改对应版本!!!
修改配置后,docker restart myredis
重启Redis!
2.打包-Dockerfile:
FROM openjdk:8-jdk-slim LABEL maintainer=krian COPY target/*.jar /app.jar ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t java-demo:v1.0 .
3.工程创建:
创建一个SpringBoot+Redis工程,依赖引入:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency> <!-- redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> </dependencies>
编写application.properties配置文件:
spring.redis.host=192.168.10.100 spring.redis.password=131452
创建Controller层:
package com.example.demo.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author: Lunaticer * @Create: 2021-10-05 11:28 * @Tip: Keeping the eyes of the prize ! * @Description: 控制层-统计访问人数 */ @RestController public class TestController { @Autowired StringRedisTemplate redisTemplate; @GetMapping("/hello") public String count(){ Long increment = redisTemplate.opsForValue().increment("count-people"); return "有【" + increment + "】人访问了这个页面"; } }
测试:http://localhost:8080/hello
4.使用Docker打包镜像:
先使用IDEA对当前工程进行打包!!!
创建一个Dockerfile文件到工程目录中:
FROM openjdk:8-jdk-slim LABEL maintainer=krian COPY target/*.jar /app.jar ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像:
docker build -t 镜像名称:版本号 . #.表示定位到当前目录
4.启动容器:
启动应用容器
docker run -d -p 8080:8080 --name myjava-app 镜像名:版本号
分享镜像
# 登录docker hub docker login #给旧镜像起名 docker tag java-demo:v1.0 leifengyang/java-demo:v1.0 # 推送到docker hub docker push leifengyang/java-demo:v1.0 # 别的机器 docker pull leifengyang/java-demo:v1.0 # 别的机器运行 docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0