zzh

zzh

Docker で Spring プロジェクトと Redis をリンクする

コードの実装#
@RestController
public class HelloWorldTest {
    
    @Autowired
    private RedisTemplate redisTemplate;
    
    @GetMapping(path = "/info")
    @ResponseBody
    public String info(){
        return "こんにちは世界!";
    }
    
    @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 ファイルの設定#

image
その中で redis.host=redis(これについては後で説明します)。

Docker を使用して redis を起動する#
docker run -d redis:alpine

ここでは、公開されている Docker イメージを直接使用します。

image

Docker を使用して Spring プロジェクトを起動する#
  • Dockerfile を使用してカスタムイメージを作成する
    Dockerfile:
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 プロジェクトを実行する
docker run -d --link hardcore_nash:redis -p 8081:8081 zzh_project:1.0 java -jar /tmp/app.jar

ここでは、redis との通信のために redis にリンクする必要があります。redis コンテナ名を hardcore_nash から redis に変更します(これはプロジェクトの yml ファイルで redis.host=redis としているためです)。これにより通信が完了します。

注意事項#

Docker では、docker-compose を使用して 2 つのコンテナをリンクすることもできますが、redis コンテナがまだ完全に起動していない状態で Spring プロジェクトが起動するため、redis に接続することはできません。エラーが発生します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。