Docker 链接spring项目与redis

代码实现

Copy
@RestController
public class HelloWorldTest {

@Autowired
private RedisTemplate redisTemplate;

@GetMapping(path = "/info")
@ResponseBody
public String info(){
return "hello world!";
}

@GetMapping(path = "/getRedis/{key}")
@ResponseBody
public String get(@PathVariable(value = "key") String key){
return redisTemplate.opsForValue().get(key).toString();
}

@GetMapping(path = "/setRedis/{key}/{value}")
@ResponseBody
public String set(@PathVariable(value = "key") String key, @PathVariable(value = "value") String value){
redisTemplate.opsForValue().set(key, value);
return "ok";
}
}

yml 文件配置

其中 redis.host=redis（这一点后续我们会介绍）。

使用 docker 启动 redis

Copy
docker run -d redis:alpine

我们这里直接使用 docker 的公共镜像。

使用 docker 启动 spring 项目

使用 Dockerfile 创建一个自定义镜像
Dockerfile：

Copy
FROM java:8

COPY ./HelloWoldTest-1.0-SNAPSHOT.jar /tmp/app.jar
# 暴露端口
EXPOSE 8081

# 入口，java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

这里我们使用了自定义镜像 java:8 作为基础镜像（里面就是装载了 jdk1.8 的镜像，需要的同学可以自己创建）。

运行 spring 项目

Copy
docker run -d --link hardcore_nash:redis -p 8081:8081 zzh_project:1.0 java -jar /tmp/app.jar

这里我们需要链接上 redis 来通信，将 redis 容器名 hardcore_nash 重命名为 redis（这是因为我们在项目中 yml 的文件 redis.host=redis）。这样即可完成通信。

注意事项

在 docker 中也可以使用 docker-compose 来链接两个容器，尽管可以通信，但是由于 redis 容器还没有完全启动，spring 项目就启动了，这时候是没有办法连上 redis 的，会报错。