Spring Boot, Docker, Buildpacks ve Jib kullanarak uygulamaları verimli bir şekilde konteynerleştirmek için birden fazla yöntem sunar. Bu kılavuz, Spring Boot uygulamalarını Docker kullanarak oluşturma ve dağıtma süreçlerini ele almaktadır.
Yazan
Şuayb Şimşek
Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.
plugins {
id 'org.springframework.boot' version '3.2.0'
id 'com.google.cloud.tools.jib' version '3.3.2'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
🛠️ Adım 2: Basit Bir Spring Boot Uygulaması Oluşturun
Docker konteyneri içinde dağıtılacak bir REST uç noktası tanımlayın.
▶️ Adım 3: Docker İmajı Oluşturma ve Çalıştırma
Bu bölümde Adım 3: Docker İmajı Oluşturma ve Çalıştırma konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Seçenek 1: Buildpacks Kullanarak
Spring Boot, Buildpacks ile Dockerfile kullanmadan Docker imajları oluşturmayı destekler.
BASH
mvn spring-boot:build-image
BASH
gradle bootBuildImage
Konteyneri çalıştırın:
BASH
docker run --rm -p 8080:8080 myproject:0.0.1-SNAPSHOT
Seçenek 2: Jib Kullanarak
Jib, Docker daemon olmadan optimize edilmiş konteyner imajları oluşturmayı sağlar.
BASH
mvn jib:dockerBuild
BASH
gradle jibDockerBuild
Jib ile oluşturulan konteyneri çalıştırın:
BASH
docker run --rm -p 8080:8080 myproject:0.0.1-SNAPSHOT
▶️ Uygulamayı Çalıştırma
Konteyner çalıştırıldıktan sonra, REST API'yi test edin:
BASH
curl -X GET http://localhost:8080/hello
Beklenen Çıktı:
PLAINTEXTsnippet.txt
Docker üzerinde çalışan Spring Boot uygulamasından merhaba!
🏁 Sonuç
Artık Spring Boot Docker Entegrasyonu için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.
JAVADockerApplication.java
package com.example.docker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DockerApplication {
public static void main(String[] args) {
SpringApplication.run(DockerApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "Docker üzerinde çalışan Spring Boot uygulamasından merhaba!";
}
}
KOTLINDockerApplication.kt
package com.example.docker
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@SpringBootApplication
@RestController
class DockerApplication {
@GetMapping("/hello")
fun hello(): String = "Docker üzerinde çalışan Spring Boot uygulamasından merhaba!"
}
fun main(args: Array<String>) {
runApplication<DockerApplication>(*args)
}